我有一个 Pandas DataFrame,其中大部分填充了实数,但其中也有一些 nan
值。
如何将 nan
替换为它们所在列的平均值?
这个问题与这个问题非常相似:numpy array: replace nan values with average of columns但不幸的是,那里给出的解决方案不适用于 pandas DataFrame。
最佳答案
您可以简单地使用 DataFrame.fillna
直接填写nan
的:
In [27]: df
Out[27]:
A B C
0 -0.166919 0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 NaN -2.027325 1.533582
4 NaN NaN 0.461821
5 -0.788073 NaN NaN
6 -0.916080 -0.612343 NaN
7 -0.887858 1.033826 NaN
8 1.948430 1.025011 -2.982224
9 0.019698 -0.795876 -0.046431
In [28]: df.mean()
Out[28]:
A -0.151121
B -0.231291
C -0.530307
dtype: float64
In [29]: df.fillna(df.mean())
Out[29]:
A B C
0 -0.166919 0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 -0.151121 -2.027325 1.533582
4 -0.151121 -0.231291 0.461821
5 -0.788073 -0.231291 -0.530307
6 -0.916080 -0.612343 -0.530307
7 -0.887858 1.033826 -0.530307
8 1.948430 1.025011 -2.982224
9 0.019698 -0.795876 -0.046431
fillna
的文档字符串说 value
应该是标量或字典,但是,它似乎也适用于 Series
.如果你想传递一个字典,你可以使用 df.mean().to_dict()
。
关于python - Pandas 数据帧 : replace nan values with average of columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689823/