温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样用pandas处理缺失值

发布时间:2026-09-03 09:43:44 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

pandas 中,处理缺失值(通常是 NaNNone)是非常常见的操作。下面从识别 → 删除 → 填充 → 高级处理几个方面系统讲一下。


一、识别缺失值

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()

二、删除缺失值

1. 删除包含缺失值的行

df.dropna()

2. 删除包含缺失值的列

df.dropna(axis=1)

3. 只删除“全为空”的行/列

df.dropna(how='all')

4. 至少有多少非缺失值才保留

df.dropna(thresh=2)  # 至少 2 个非缺失值

三、填充缺失值(最常用)

1. 用固定值填充

df.fillna(0)

2. 按列分别填充

df.fillna({'A': 0, 'B': 100})

3. 用均值 / 中位数 / 众数

df['A'].fillna(df['A'].mean(), inplace=True)
df['B'].fillna(df['B'].median(), inplace=True)

4. 用前一个 / 后一个值填充

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)

  • 数值型:均值 / 中位数更合理
  • 类别型:单独类别更安全
  • 时间序列:插值优于填 0

如果你有具体数据场景(如表格、时间序列、机器学习前处理),我可以给你更针对性的代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI