假设我在数据框中有一列包含一些数字和一些非数字
>> df['foo']
0 0.0
1 103.8
2 751.1
3 0.0
4 0.0
5 -
6 -
7 0.0
8 -
9 0.0
Name: foo, Length: 9, dtype: object
如何将此列转换为 np.float
,并让其他所有非 float 转换为 NaN
?
当我尝试时:
>> df['foo'].astype(np.float)
或
>> df['foo'].apply(np.float)
我得到 ValueError: could not convert string to float: -
最佳答案
在 Pandas 中 0.17.0
convert_objects
引发警告:
FutureWarning: convert_objects is deprecated. Use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.
您可以使用 pd.to_numeric
方法并将其应用于带有 arg coerce
.
df1 = df.apply(pd.to_numeric, args=('coerce',))
或许更恰当:
df1 = df.apply(pd.to_numeric, errors='coerce')
编辑
上述方法只对pandas版本>= 0.17.0
有效,来自docs what's new in pandas 0.17.0 :
pd.to_numeric is a new function to coerce strings to numbers (possibly with coercion) (GH11133)
关于python - Pandas:转换为数字,必要时创建 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18434208/