我在熊猫身上遇到了一个奇怪的问题。我有一个包含多个NaN
值的Dataframe。我以为我可以使用列方式填充NaN
个值(也就是说,用其列的平均值填充每个NaN
值)但是当我尝试以下
col_means = mydf.apply(np.mean, 0)
mydf = mydf.fillna(value=col_means)
我仍然看到一些NaN
值。为什么呢?
是否因为我原始数据框中的NaN
值比col_means
中的条目多?{1}}?并且逐行填充与逐行填充之间究竟有什么区别?
答案 0 :(得分:5)
你可以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值,那么这些将在DataFrame的fillna中使用,也许你想在这个系列上使用fillna
,即
df.mean().fillna(0)
df.fillna(df.mean().fillna(0))