我有一个看起来像这样的数据框-
>>> 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
您需要分配给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)
| 归档时间: |
|
| 查看次数: |
5509 次 |
| 最近记录: |