我有一个熊猫数据框如下:
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
我尝试使用数学模块中的 .isnan 应用函数 我尝试过 pandas .replace 属性 我尝试过 pandas 0.9 中的 .sparse 数据属性 我也尝试过 if NaN == NaN 函数中的语句。
我相信DataFrame.fillna()会为你做到这一点。
DataFrame.fillna()
链接到 Docs 以获取dataframe和Series。
例子:
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,请使用内置的特定于列的功能:
SettingWithCopyWarning
df.fillna({1:0}, inplace=True)