在 pandas 中,处理缺失值(通常是 NaN 或 None)是非常常见的操作。下面从识别 → 删除 → 填充 → 高级处理几个方面系统讲一下。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [np.nan, 2, 3, 4],
'C': [1, None, 3, None]
})
df.isna() # 返回布尔表
df.isnull() # 同上
df.notna() # 非缺失值
统计每列缺失值数量:
df.isna().sum()
df.dropna()
df.dropna(axis=1)
df.dropna(how='all')
df.dropna(thresh=2) # 至少 2 个非缺失值
df.fillna(0)
df.fillna({'A': 0, 'B': 100})
df['A'].fillna(df['A'].mean(), inplace=True)
df['B'].fillna(df['B'].median(), inplace=True)
df.fillna(method='ffill') # 向前填充
df.fillna(method='bfill') # 向后填充
(新版本推荐)
df.ffill()
df.bfill()
ts = pd.Series([1, np.nan, np.nan, 4],
index=pd.date_range('2024-01-01', periods=4))
ts.interpolate() # 线性插值
常用插值方法:
ts.interpolate(method='time')
ts.interpolate(method='quadratic')
df['C'] = df['C'].fillna('未知')
或设为单独类别:
df['C'] = df['C'].astype('category')
df['C'] = df['C'].cat.add_categories('缺失').fillna('缺失')
# 数值型
df['A'] = df['A'].fillna(df['A'].mean())
# 分类型
df['C'] = df['C'].fillna('missing')
# 或直接删除
df = df.dropna()
✅ 不要盲目 fillna(0)
如果你有具体数据场景(如表格、时间序列、机器学习前处理),我可以给你更针对性的代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。