在 Pandas 中的特定行和列中填充 NaN

Ank*_*eth 3 python pandas

我有一个看起来像这样的数据框-

>>> df  
     a    d    s  
0  1.0  3.0  2.0  
1  2.0  NaN  4.0  
2  3.0  6.0  NaN  
3  NaN  NaN  3.0  
4  5.0  8.0  NaN  
5  6.0  NaN  NaN  
Run Code Online (Sandbox Code Playgroud)

我必须用“d”列中的平均值替换 NaN,其中“a”列的值 > 2。所以,我写-

>>> df['d'][df['a']>2]  
2    6.0  
4    8.0  
5    NaN  

>>> df['d'][df['a']>2].fillna(df['d'][df['a']>2].mean(), inplace = True)  
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用,它返回相同的数据帧,而不影响“d”列最后一行中的 NaN 值。

请告诉我我在这里做错了什么。我正在使用 pandas 版本 0.21

cs9*_*s95 7

您需要分配给loc. 首先,计算平均值。

i = df.loc[df.a > 2, 'd'].mean()
Run Code Online (Sandbox Code Playgroud)

现在,调用fillna并将其分配回来。

df.loc[df.a > 2, 'd'] = df.loc[df.a > 2, 'd'].fillna(i)
df

     a    d    s
0  1.0  3.0  2.0
1  2.0  NaN  4.0
2  3.0  6.0  NaN
3  NaN  NaN  3.0
4  5.0  8.0  NaN
5  6.0  7.0  NaN    # <---
Run Code Online (Sandbox Code Playgroud)