You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas DataFrame中仅将标记离群值替换为插值并保留原有NaN

解决方案

核心思路是先标记并暂存原生NaN的位置,仅对离群标记的位置做插值后再还原原生NaN,不会影响后续需要用到的原始空值。

实现代码

import numpy as np
import pandas as pd

# 1. 记录x列中原生NaN的位置掩码
original_nan_mask = df['x'].isna()

# 2. 仅将outlier_flag为-1的离群值替换为NaN,原生NaN保留不动
df.loc[df['outlier_flag'] == -1, 'x'] = np.nan

# 3. 对x列执行插值
df['x'] = df['x'].interpolate(method='polynomial', order=3)

# 4. 还原原本就存在的NaN值,避免被插值覆盖
df.loc[original_nan_mask, 'x'] = np.nan

说明

  • 之前逐行apply的写法报错,是因为interpolate是Pandas Series/数据框的批量方法,不能对单个int类型的数值调用。
  • 上述代码运行后,示例中的543会被插值为40,第二行的原生NaN会完整保留,完全符合需求。
  • 如果多项式插值因为数据点不足报错,可以先把method改为linear验证逻辑正确性,确认没问题后再调整插值方法和阶数。

内容的提问来源于stack exchange,提问作者NeStack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:57:02