代码之家  ›  专栏  ›  技术社区  ›  Jam1

仅将数字的字符串表示形式转换为字符串中的数字

  •  1
  • Jam1  · 技术社区  · 7 年前

    我有一只熊猫 Dataframe 我意识到 数据帧 列只有数字的字符串表示形式,则转换将进行,否则不会进行。下面的代码用于将字符串形式的所有数字转换为数字。

    import pandas as pd
    from functools import partial
    
    df = pd.DataFrame({0: ['3', 'r'], 1: ['1', 's']})
    df = df.apply(partial(pd.to_numeric, errors='ignore'))
    

    上面的代码不起作用,因为 'r' 's' 在列中。所以一切都会像弦一样。如何获取要转换的代码 '3' '1' 到数字 3 1

    1 回复  |  直到 7 年前
        1
  •  3
  •   piRSquared    7 年前

    作为 @MadPhysicist 国家,熊猫系列单身 dtype . 但是 数据类型 object 这意味着任何事情都会发生。你会输的 具有数字 数据类型 但这可能是你想要的。

    NaN

    df.apply(pd.to_numeric, errors='coerce')
    
         0    1
    0  3.0  1.0
    1  NaN  NaN
    

    注:
    apply 遍历每个列并将该列传递给 callable 那是给的。这意味着每一列都得到了这样的处理:

    pd.to_numeric(one_of_the_columns, errors='coerce')
    

    使用 errors='coerce' np.nan 否则。


    使用 数据类型 对象和丢弃效率。。。不管你想做什么

    df = df.applymap(lambda x: pd.to_numeric(x, errors='ignore'))
    df
    
       0  1
    0  3  1
    1  r  s
    

    3 要获得数字,请尝试:

    df.applymap(type)
    
                           0                      1
    0  <class 'numpy.int64'>  <class 'numpy.int64'>
    1          <class 'str'>          <class 'str'>
    

    注:
    applymap 遍历每个 细胞 并通过 通过。在这种情况下,每个细胞的处理方式如下:

    pd.to_numeric(one_particular_cell, errors='ignore')
    

    这是低效的,但做你想要的。当Pandas试图协调您所造成的损害时,它意识到某些列中存在混合类型,并更改了 数据类型 对象 为了适应。