DataFrame中interpolate函数无法填充NaN值问题求助
ESG缺失数据填充问题的解决思路
核心问题排查
你的代码能运行但无法填充NaN,主要是两个关键问题:
- 未执行插值函数:定义了
interpolate_func但没有调用,填充逻辑根本没触发。 - 插值逻辑存在优化点:默认线性插值基于位置,不匹配时间索引;循环中动态删列可能导致遍历异常。
具体修复方案
1. 补全函数调用
在代码末尾添加函数执行语句,让填充逻辑生效:
# 执行插值与列删除逻辑 try1 = interpolate_func(try1) # 验证修复结果 print(try1.isnull().sum())
2. 优化插值函数实现
修改函数,使用时间驱动的插值方法,同时先收集待删除列再统一删除,避免遍历错误:
def interpolate_func(df): cols_to_drop = [] for column in df.columns: missing_count = df[column].isna().sum() if 1 <= missing_count <= 6: # 针对时间索引使用time插值,更贴合年度数据的时序逻辑 df[column] = df[column].interpolate(method='time') elif missing_count > 6: cols_to_drop.append(column) # 统一删除符合条件的列 df = df.drop(cols_to_drop, axis=1) return df
3. 特殊场景处理(可选)
如果列的首尾存在连续NaN,默认interpolate不会填充,可添加参数强制填充(需结合业务场景判断合理性):
df[column] = df[column].interpolate(method='time', limit_direction='both')
内容的提问来源于stack exchange,提问作者lorenzo panetta
相关产品推荐
相关产品推荐

