跳转至

Pandas 缺失值处理

概念与用途

Pandas 使用 NaN、NaT 和 pd.NA 表示不同 dtype 的缺失值。处理方式取决于缺失机制和业务含义,可以删除、常量填充、统计填充、前后传播或保留并建模。

核心 API

isna、notna、dropna、fillna、ffill、bfill、interpolate、combine_first。

可运行示例

import pandas as pd

df = pd.DataFrame({"group": ["A", "A", "B"], "value": [10.0, None, 30.0]})
df["value"] = df["value"].fillna(df.groupby("group")["value"].transform("median"))
df["value"] = df["value"].fillna(df["value"].median())
print(df)

示例二:按时间插值并限制传播

import pandas as pd

s = pd.Series(
    [1.0, None, 3.0, None],
    index=pd.to_datetime(["2026-01-01", "2026-01-02", "2026-01-03", "2026-01-10"]),
)
interpolated = s.interpolate(method="time", limit=1, limit_area="inside")
print(interpolated)

method="time" 使用日期间距而非行位置;limit_area="inside" 不外推边界空值。结果保留原索引并返回新 Series。

dtype、对齐与工程语义

可空整数、布尔和字符串优先使用 Int64、boolean、string 与 pd.NA。用另一个 Series 填充时会按索引对齐。分组填充前检查空分组键;时间前向填充必须在实体内排序,设置 limit 防止跨越过长缺口。

注意事项

不要用 == None 或 == float("nan") 检测缺失,应使用 isna。前向填充前必须排序,并限制跨实体传播;时间插值需正确时间索引。删除行可能引入样本偏差,填充也会改变统计分布,应记录缺失率、方法和影响。