Pandas:自定义 fillna() 函数?
Pandas: Custom fillna() function?
假设我有这样的数据:
>>> df = pd.DataFrame({'values': [5, np.nan, 2, 2, 2, 5, np.nan, 4, 5]})
>>> print(df)
values
0 5.0
1 NaN
2 2.0
3 2.0
4 2.0
5 5.0
6 NaN
7 4.0
8 5.0
我知道我可以使用 fillna()
和 fillna(method='ffill')
等参数来用以前的值填充缺失值。有没有办法为 fillna 编写自定义方法?假设我希望每个 NaN 值都被前 2 个值和后 2 个值的算术中间值替换,我该怎么做? (我并不是说这是填充值的好方法,但我想知道是否可以做到)。
输出的示例:
0 5.0
1 3.0
2 2.0
3 2.0
4 2.0
5 5.0
6 4.0
7 4.0
8 5.0
您可以按如下方式一起使用 ffill
和 bfill
:
df['values'] = df['values'].ffill().add(df['values'].bfill()).div(2)
print(df)
values
0 5.0
1 3.0
2 2.0
3 2.0
4 2.0
5 5.0
6 4.0
7 4.0
8 5.0
只需将 df['values']
更改为 df
即可应用于整个数据帧!
假设我有这样的数据:
>>> df = pd.DataFrame({'values': [5, np.nan, 2, 2, 2, 5, np.nan, 4, 5]})
>>> print(df)
values
0 5.0
1 NaN
2 2.0
3 2.0
4 2.0
5 5.0
6 NaN
7 4.0
8 5.0
我知道我可以使用 fillna()
和 fillna(method='ffill')
等参数来用以前的值填充缺失值。有没有办法为 fillna 编写自定义方法?假设我希望每个 NaN 值都被前 2 个值和后 2 个值的算术中间值替换,我该怎么做? (我并不是说这是填充值的好方法,但我想知道是否可以做到)。
输出的示例:
0 5.0
1 3.0
2 2.0
3 2.0
4 2.0
5 5.0
6 4.0
7 4.0
8 5.0
您可以按如下方式一起使用 ffill
和 bfill
:
df['values'] = df['values'].ffill().add(df['values'].bfill()).div(2)
print(df)
values
0 5.0
1 3.0
2 2.0
3 2.0
4 2.0
5 5.0
6 4.0
7 4.0
8 5.0
只需将 df['values']
更改为 df
即可应用于整个数据帧!