如何用自定义函数替换Pandas中的ffill()方法填充NaN值?
问题描述
我的示例DataFrame如下:
x y 0 0 1.1 1 1 3.9 2 2 11.2 3 3 21.5 4 4 34.8 5 5 51.0 6 6 70.2 7 7 NaN 8 8 NaN 9 9 NaN
如果只是向前填充NaN值,执行df['y'].ffill(inplace=True)即可,但我需要将y列的NaN值替换为公式2 * x²的计算结果,期望输出如下:
x y 0 0 1.1 1 1 3.9 2 2 11.2 3 3 21.5 4 4 34.8 5 5 51.0 6 6 70.2 7 7 98 8 8 128 9 9 162
解决方案
这里提供几种高效的实现方式:
方法1:利用fillna直接填充计算值
fillna可以接收Series作为填充值,自动匹配索引替换NaN:
df['y'] = df['y'].fillna(2 * df['x'] ** 2)
这种方法简洁高效,优先推荐。
方法2:使用np.where条件赋值
通过判断y是否为缺失值,选择保留原值或计算新值:
import numpy as np df['y'] = np.where(df['y'].isna(), 2 * df['x'] ** 2, df['y'])
逻辑清晰,适合需要扩展多条件判断的场景。
方法3:apply逐行处理(适合复杂逻辑)
如果需要更复杂的自定义规则,可以用apply遍历每行:
import pandas as pd def fill_missing_y(row): if pd.isna(row['y']): return 2 * row['x'] ** 2 return row['y'] df['y'] = df.apply(fill_missing_y, axis=1)
注意:该方法在数据量较大时效率低于前两种,仅在逻辑复杂时使用。
内容的提问来源于stack exchange,提问作者serdar_bay
相关产品推荐
相关产品推荐

