如何在熊猫数据框中将单元格设置为 NaN

新手上路,请多包涵

我想用 NaN 替换数据框列中的错误值。

 mydata = {'x' : [10, 50, 18, 32, 47, 20], 'y' : ['12', '11', 'N/A', '13', '15', 'N/A']}
df = pd.DataFrame(mydata)

df[df.y == 'N/A']['y'] = np.nan

但是,最后一行失败并引发警告,因为它正在处理 df.那么,处理这个问题的正确方法是什么?我见过很多使用 iloc 或 ix 的解决方案,但在这里,我需要使用布尔条件。

原文由 Mark Morrisson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 897
2 个回答

只需使用 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

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

上面的大部分回复都需要导入一个外部模块: import numpy as np

pandas 本身有一个内置的解决方案: pd.NA ,可以这样使用:

 df.replace('N/A', pd.NA)

原文由 stallingOne 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题