python - 将包含 NaN 值的整个 Pandas 数据框从字符串转换为 float

标签 python pandas nan

我想将 pandas 数据框中的所有值从字符串转换为 float 。我的数据框包含各种 NaN 值(例如 NaN、NA、None)。例如,

import pandas as pd
import numpy as np

my_data = np.array([[0.5, 0.2, 0.1], ["NA", 0.45, 0.2], [0.9, 0.02, "N/A"]])
df = pd.DataFrame(my_data, dtype=str)

我找到了 herehere (在其他地方) convert_objects 可能是要走的路。但是,我收到一条消息,指出它已被弃用(我使用的是 Pandas 0.17.1),应该改用 to_numeric。

df2 = df.convert_objects(convert_numeric=True)

输出:

FutureWarning: convert_objects is deprecated.  Use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.

但是 to_numeric 似乎并没有实际转换字符串。

df3 = pd.to_numeric(df, errors='force')

输出:

df2:
     0     1    2
0  0.5  0.20  0.1
1  NaN  0.45  0.2
2  0.9  0.02  NaN

df2 dtypes:
0    float64
1    float64
2    float64
dtype: object

df3:
     0     1    2
0  0.5   0.2  0.1
1   NA  0.45  0.2
2  0.9  0.02  N/A

df3 dtypes:
0    object
1    object
2    object
dtype: object

我应该使用 convert_objects 并处理警告消息,还是有适当的方法来使用 to_numeric 做我想做的事情?

最佳答案

奇怪的是,这有效:

In [11]:
df.apply(lambda x: pd.to_numeric(x, errors='force'))

Out[11]:
     0     1    2
0  0.5  0.20  0.1
1  NaN  0.45  0.2
2  0.9  0.02  NaN

由于某种原因,它似乎无法强制转换整个 df

如果你讨厌打字(感谢@Zero)那么你可以使用:

df.apply(pd.to_numeric, errors='force')

关于python - 将包含 NaN 值的整个 Pandas 数据框从字符串转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35949412/

相关文章:

python - 使用 curve_fit 拟合数据

python - numpy 数组与 nan 与标量的不等式比较

javascript - NaN Jquery 旋钮

python - 是否可以使用 python open 函数打开内存中的图像?

python - 将curl替换为相当于将文件POST到服务器的python请求

python - Pandas :用另一个数据框替换一行

python - 如何在 Pandas groupby 中切片和组合特定的行值?

python - 无法弄清楚如何清除随机森林中的 NaN

Python3.6要exe还是编译成其他选项?

python - 仅重新索引 MultiIndex 数据帧的级别,reindex() 损坏了吗?