Python 常用缺失值处理方法

Python 常用缺失值处理方法,包括:

  • 检查缺失值 ❀
  • 删除缺失值 ❀
  • 前向填充(forward fill) ❀
  • 后向填充(backward fill) ❀
  • 插值(线性、多项式、时间序列插值等) ❀

全部使用 pandas(数据分析最常用)。

一、 数据示例 ⭐️

在这里插入图片描述

import pandas as pd        # 导入 pandas 库,用于数据处理与分析
import numpy as np         # 导入 numpy 库,用于科学计算(如产生 NaN)

# 创建一个 DataFrame,其中包含两列:time 和 value
df = pd.DataFrame({
    # 生成 7 天的日期序列,从 2024-01-01 开始
    "time": pd.date_range("2024-01-01", periods=7),

    # 创建一个数值列表,部分值为 np.nan(缺失值)
    "value": [1, np.nan, 3, np.nan, np.nan, 6, 7]
})

# 打印输出整个 DataFrame
print(df)

在这里插入图片描述

二、 查看缺失值 ⭐️

在这里插入图片描述

# 查看每列缺失数量
print(df.isna().sum())

# 查看具体缺失行
print(df[df.isna().any(axis=1)])

在这里插入图片描述

三、 删除缺失值 ⭐️

在这里插入图片描述

# 删除含缺失值的行
df_drop_row = df.dropna()

# 删除含缺失值的列
df_drop_col = df.dropna(axis=1)

在这里插入图片描述

四、前向填充(Forward Fill) ⭐️

在这里插入图片描述

适用于时间序列。
缺失值会用 前面 的非缺失值填上。

df_ffill = df.fillna(method="ffill")

在这里插入图片描述

五、后向填充(Backward Fill) ⭐️

在这里插入图片描述

缺失值会用 后面 的非缺失值填上。

df_bfill = df.fillna(method="bfill")

在这里插入图片描述

六、线性插值(最常用) ⭐️

适用于连续的数值数据。

df_linear = df.interpolate(method="linear")

七、时间序列插值(Time Interpolation) ⭐️

如果你的索引是时间序列,效果更好:

df_time = df.set_index("time").interpolate(method="time")

在这里插入图片描述

八、多项式插值(Polynomial Interpolation) ⭐️

在这里插入图片描述

适合曲线型趋势:

# ⚠️ order=2 表示二次曲线,可根据需要调整。
df_poly = df.interpolate(method="polynomial", order=2)

九、分组插值(按某种类别分组) ⭐️

如果数据有多组情况:

df.groupby("group")["value"].apply(lambda x: x.interpolate())

十、总结对比 ⭐️

方法 说明 推荐使用场景
dropna 删除缺失 缺失值很少
ffill/bfill 用前/后值填充 时间序列、趋势稳定
linear 线性插值 大多数数值型数据
time 时间序列插值 按时间点变化的数据
polynomial 多项式插值 曲线趋势强
groupby + interpolate 分组数据 多个设备、多个类别

在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐