Pandas fillna:输出仍然具有NaN值

5

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

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

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

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

1个回答

5
您可以使用 df.mean() Series(类似于字典)进行 fillna
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中使用,也许您想要对这个Series使用fillna
df.mean().fillna(0)
df.fillna(df.mean().fillna(0))

1
你需要执行 from numpy import nan - Phillip Cloud
1
啊,好的。那就继续吧。 :) - Phillip Cloud
1
@PhillipCloud 嗯,说得好。我想答案是在字典中有NaN会用NaN填充它们 :) - Andy Hayden
谢谢,但在 df.fillna(value=X, axis=Y) 这一步中,value 是一个字典,那么 axis 在这种情况下的作用是什么? - Amelio Vazquez-Reina
1
可能会有问题。不确定fillna函数中的轴参数是否有任何影响。 - Phillip Cloud
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接