我对熊猫有一个奇怪的问题。我有一个具有多个NaN值的数据帧。我想我可以使用column means填充那些NaN值(也就是说,用它的column means填充每个NaN值),但是当我尝试以下操作时

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

我仍然看到一些NaN值。为什么?
是因为我的原始数据帧中的NaN值比col_means中的条目多吗?按列填充和按行填充到底有什么区别?

最佳答案

您可以使用fillna系列df.mean()(类似于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值,那么这些值将在数据帧的fillna中使用,也许您希望在这个系列上使用fillna,即。
df.mean().fillna(0)
df.fillna(df.mean().fillna(0))

08-19 20:56