如何在 Pandas 数据帧的某一列中将 NaN 值替换为零?

18 浏览
0 Comments

如何在 Pandas 数据帧的某一列中将 NaN 值替换为零?

我有一个Pandas Dataframe如下:

      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

当我尝试对Amount列应用函数时,我得到以下错误:

ValueError: cannot convert float NaN to integer

我尝试使用Math模块中的.isnan应用函数

我尝试了pandas.replace属性

我尝试了pandas 0.9的.sparse数据属性

我还尝试了在功能中使用if NaN == NaN语句。

我还查看了这篇文章How do I replace NA values with zeros in an R dataframe?,同时查看了其他文章。

所有我尝试的方法都没有起作用,或者不能识别NaN。

任何提示或解决方案将不胜感激。

admin 更改状态以发布 2023年5月22日
0
0 Comments

不能保证切片返回的是视图还是副本。你可以这样做:

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

0
0 Comments

我相信 DataFrame.fillna() 能够帮你完成这个任务。

有关 DataFrameSeries 的文档链接。

例子:

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)

0