5

我在 Pandas 中遇到了一个奇怪的问题。我有一个包含多个NaN值的数据框。我以为我可以NaN使用列均值填充这些值(即,NaN用列均值填充每个值)但是当我尝试以下操作时

  col_means = mydf.apply(np.mean, 0)
  mydf = mydf.fillna(value=col_means)

我仍然看到一些NaN价值观。为什么?

是因为我NaN的原始数据框中的值比中的条目多col_means吗?逐列填充与逐行填充之间究竟有什么区别?

4

1 回答 1

5

您可以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))
于 2013-08-08T13:28:15.813 回答