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

Pandas数据处理:用前值填充与插值生成col_B

处理DataFrame缺失值:结合前向填充与线性插值生成col_B

嘿,这事儿好办!针对你给出的DataFrame,我们可以结合前向填充和线性插值来生成col_B,既能处理连续缺失的情况,又能让填充后的数值更贴合数据的趋势(毕竟你的时间列是固定300秒间隔的,线性插值会更合理)。

第一步:先还原你的DataFrame

首先我们把你提供的数据转换成pandas DataFrame:

import pandas as pd
import numpy as np

# 构造原始数据
data = {
    'time': [1520582580.000, 1520582880.000, 1520583180.000, 1520583480.000,
             1520583780.000, 1520584080.000, 1520584380.000, 1520584680.000,
             1520584980.000, 1520585280.000, 1520585580.000, 1520585880.000,
             1520586180.000, 1520586480.000, 1520586780.000, 1520587080.000],
    'col_A': [79.000, 22.500, 29.361, 116.095, 19.972, 36.857, 15.167, np.nan,
              np.nan, np.nan, 34.500, 17.583, np.nan, 48.833, 18.806, 18.583]
}

df = pd.DataFrame(data)

第二步:缺失值处理逻辑

这里我们优先用线性插值来填充缺失值(因为你的时间是等间隔的,插值结果会更符合数据变化趋势),再用前向填充兜底处理那些无法通过插值覆盖的缺失值(比如数据开头全是NaN的极端情况):

# 基于线性插值填充缺失值,limit_direction确保从有效数值向缺失值方向填充
df['col_B'] = df['col_A'].interpolate(method='linear', limit_direction='forward')

# 兜底:如果还有未填充的缺失值,用前向填充
df['col_B'] = df['col_B'].ffill()

第三步:查看处理后的结果

运行上面的代码后,你的DataFrame会生成col_B列,处理后的部分关键值如下:

time   col_A      col_B
6   1520584380.0  15.167  15.167000
7   1520584680.0     NaN  21.697000  # 线性插值:15.167到34.5的中间值(间隔3步)
8   1520584980.0     NaN  28.227000
9   1520585280.0     NaN  34.757000
10  1520585580.0  34.500  34.500000
11  1520585880.0  17.583  17.583000
12  1520586180.0     NaN  33.208000  # 17.583和48.833的平均值

补充说明

  • 线性插值会根据缺失值前后的有效数值,计算出平滑过渡的填充值,比单纯前向填充更适合时间序列数据;
  • 如果你的时间间隔不是固定的,可以指定基于time列插值:df['col_B'] = df['col_A'].interpolate(method='linear', x=df['time']),结果会更精准;
  • 如果你更倾向于先用前值填充第一个缺失值,再对后续缺失值插值,也可以调整顺序,但对于时间序列来说,直接线性插值通常是更优的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:24:36