python - 在可能的情况下,将字符串转换为所有 pandas 列中的 float

标签 python python-3.x pandas type-conversion

我从列表列表创建了一个 pandas 数据框

import pandas as pd

df_list = [["a", "1", "2"], ["b", "3", np.nan]]
df = pd.DataFrame(df_list, columns = list("ABC"))
>>>   A  B    C
   0  a  1    2
   1  b  3  NaN

有没有办法将数据帧的所有列转换为可以转换的 float ,即 B 和 C?如果您知道,以下内容适用于要转换的列:

  df[["B", "C"]] = df[["B", "C"]].astype("float")

但是,如果您事先不知道哪些列包含数字,该怎么办?当我尝试时

  df = df.astype("float", errors = "ignore")

所有列仍然是字符串/对象。同样,

df[["B", "C"]] = df[["B", "C"]].apply(pd.to_numeric)

转换两列(尽管“B”是 int 并且“C”是“float”,因为存在 NaN 值),但是

df = df.apply(pd.to_numeric)

显然会抛出一条错误消息,但我看不出有什么方法可以抑制它。
是否有可能在不循环遍历每一列的情况下执行此字符串- float 转换,以尝试 .astype("float", errors = "ignore")

最佳答案

我想你需要参数 errors='ignore' in to_numeric :

df = df.apply(pd.to_numeric, errors='ignore')
print (df.dtypes)
A     object
B      int64
C    float64
dtype: object

如果不是混合值 - 数字与字符串,它工作得很好:

df_list = [["a", "t", "2"], ["b", "3", np.nan]]
df = pd.DataFrame(df_list, columns = list("ABC"))

df = df.apply(pd.to_numeric, errors='ignore')
print (df)
   A  B    C
0  a  t  2.0 <=added t to column B for mixed values
1  b  3  NaN

print (df.dtypes)
A     object
B     object
C    float64
dtype: object

编辑:

你也可以将 int 向下转换为 float:

df = df.apply(pd.to_numeric, errors='ignore', downcast='float')
print (df.dtypes)
A     object
B    float32
C    float32
dtype: object

它等同于:

df = df.apply(lambda x: pd.to_numeric(x, errors='ignore', downcast='float'))
print (df.dtypes)
A     object
B    float32
C    float32
dtype: object

关于python - 在可能的情况下,将字符串转换为所有 pandas 列中的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48518735/

相关文章:

python - 如何判断PyJWT的版本?

python - Flask WTF-forms 添加选择和文本区域

python - 如何从 tkinter 笔记本中触发选项卡更改功能?

python - 通过条目窗口小部件传递URL(TKinter//Python 3+)

python - 生成 'K' 数据点的最近邻

python - 解包值过多时出现错误(预期2)

python - 从 python 包中导入模块函数

python - 将大文件从 URL 直接流式传输到 gzip 文件

javascript - 如何将 javascript 变量传递给 django 模板标签

python - 具有单个列值的数据框