Answers:
只需使用replace
:
In [106]:
df.replace('N/A',np.NaN)
Out[106]:
x y
0 10 12
1 50 11
2 18 NaN
3 32 13
4 47 15
5 20 NaN
您正在尝试的操作称为链索引:http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
您可以loc
用来确保对原始dF进行操作:
In [108]:
df.loc[df['y'] == 'N/A','y'] = np.nan
df
Out[108]:
x y
0 10 12
1 50 11
2 18 NaN
3 32 13
4 47 15
5 20 NaN
虽然使用replace
似乎可以解决问题,但我想提出一种替代方法。列中数字和某些字符串值混合的问题不是用np.nan替换字符串,而是使整个列正确。我敢打赌,原始列很可能是对象类型
Name: y, dtype: object
您真正需要的是使它成为一个数字列(它将具有适当的类型,并且速度会更快),并且所有非数字值都将替换为NaN。
因此,良好的转换代码将是
pd.to_numeric(df['y'], errors='coerce')
指定errors='coerce'
强制将无法解析为数字值的字符串变为NaN。列类型为
Name: y, dtype: float64