如何用 Pandas Dataframe 的列中的零替换 NaN 值?

新手上路,请多包涵

我有一个熊猫数据框如下:

       itm Date                  Amount
67    420 2012-09-30 00:00:00   65211
68    421 2012-09-09 00:00:00   29424
69    421 2012-09-16 00:00:00   29877
70    421 2012-09-23 00:00:00   30990
71    421 2012-09-30 00:00:00   61303
72    485 2012-09-09 00:00:00   71781
73    485 2012-09-16 00:00:00     NaN
74    485 2012-09-23 00:00:00   11072
75    485 2012-09-30 00:00:00  113702
76    489 2012-09-09 00:00:00   64731
77    489 2012-09-16 00:00:00     NaN

当我尝试将函数应用于金额列时,出现以下错误:

 ValueError: cannot convert float NaN to integer

我尝试使用数学模块中的 .isnan 应用函数 我尝试了 pandas .replace 属性 我尝试了 pandas 0.9 中的 .sparse 数据属性 我也尝试过函数中的 if NaN == NaN 语句。我也看过这篇文章 How do I replace NA values with zeros in an R dataframe? 在看其他文章的时候。我尝试过的所有方法都不起作用或无法识别 NaN。任何提示或解决方案将不胜感激。

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

阅读 387
2 个回答

我相信 DataFrame.fillna() 会为你做这件事。

链接到 数据框系列 的文档。

例子:

 In [7]: df
Out[7]:
          0         1
0       NaN       NaN
1 -0.494375  0.570994
2       NaN       NaN
3  1.876360 -0.229738
4       NaN       NaN

In [8]: df.fillna(0)
Out[8]:
          0         1
0  0.000000  0.000000
1 -0.494375  0.570994
2  0.000000  0.000000
3  1.876360 -0.229738
4  0.000000  0.000000

要仅在一列中填充 NaN,请仅选择该列。在这种情况下,我使用 inplace=True 来实际更改 df 的内容。

 In [12]: df[1].fillna(0, inplace=True)
Out[12]:
0    0.000000
1    0.570994
2    0.000000
3   -0.229738
4    0.000000
Name: 1

In [13]: df
Out[13]:
          0         1
0       NaN  0.000000
1 -0.494375  0.570994
2       NaN  0.000000
3  1.876360 -0.229738
4       NaN  0.000000

编辑:

要避免 SettingWithCopyWarning ,请使用内置的特定于列的功能:

 df.fillna({1:0}, inplace=True)

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

不保证切片返回视图或副本。你可以做

df['column'] = df['column'].fillna(value)

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

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