我在 Pandas 中遇到了一个奇怪的问题。我有一个包含多个NaN
值的数据框。我以为我可以NaN
使用列均值填充这些值(即,NaN
用列均值填充每个值)但是当我尝试以下操作时
col_means = mydf.apply(np.mean, 0)
mydf = mydf.fillna(value=col_means)
我仍然看到一些NaN
价值观。为什么?
是因为我NaN
的原始数据框中的值比中的条目多col_means
吗?逐列填充与逐行填充之间究竟有什么区别?
您可以fillna
使用df.mean()
Series(类似于 dict):
In [11]: df = pd.DataFrame([[1, np.nan], [np.nan, 4], [5, 6]])
In [12]: df
Out[12]:
0 1
0 1 NaN
1 NaN 4
2 5 6
In [13]: df.fillna(df.mean())
Out[13]:
0 1
0 1 5
1 3 4
2 5 6
注意:这df.mean()
是按行的平均值,它给出了填充值:
In [14]: df.mean()
Out[14]:
0 3
1 5
dtype: float64
注意:如果df.mean()
有一些 NaN 值,那么这些将用于 DataFrame 的 fillna,也许你想fillna
在这个系列上使用 a
df.mean().fillna(0)
df.fillna(df.mean().fillna(0))