Skip to content

缺失值处理

缺失值是数据分析中常见的问题,Pandas 提供了多种处理缺失值的方法。

检测缺失值

python
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, np.nan, 8],
    'C': [9, 10, 11, 12]
})

# 检测缺失值
print(df.isna())

# 检测非缺失值
print(df.notna())

# 统计每列缺失值数量
print(df.isna().sum())

# 统计每行缺失值数量
print(df.isna().sum(axis=1))

# 查看有缺失值的行
print(df[df.isna().any(axis=1)])

删除缺失值

python
# 删除包含缺失值的行
df_clean = df.dropna()
print(df_clean)

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

# 只删除全部缺失的行
df_clean = df.dropna(how='all')
print(df_clean)

# 根据阈值删除(保留至少n个非空值)
df_clean = df.dropna(thresh=2)
print(df_clean)

# 只在特定列中检查缺失值
df_clean = df.dropna(subset=['A', 'B'])
print(df_clean)

填充缺失值

python
# 用标量填充
df_filled = df.fillna(0)
print(df_filled)

# 用不同值填充不同列
df_filled = df.fillna({'A': 0, 'B': 99})
print(df_filled)

# 用前一个值填充(前向填充)
df_filled = df.fillna(method='ffill')
print(df_filled)

# 用后一个值填充(后向填充)
df_filled = df.fillna(method='bfill')
print(df_filled)

# 限制填充次数
df_filled = df.fillna(method='ffill', limit=1)
print(df_filled)

统计填充

python
df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [10, np.nan, 30, 40, 50]
})

# 用平均值填充
df_filled = df.fillna(df.mean())
print(df_filled)

# 用中位数填充
df_filled = df.fillna(df.median())
print(df_filled)

# 用众数填充
df_filled = df.fillna(df.mode().iloc[0])
print(df_filled)

插值填充

python
df = pd.DataFrame({
    'A': [1, np.nan, np.nan, 4, 5]
})

# 线性插值
df_interpolated = df.interpolate()
print(df_interpolated)

# 多项式插值
df_interpolated = df.interpolate(method='polynomial', order=2)
print(df_interpolated)

替换特殊值

python
df = pd.DataFrame({
    'A': [1, -999, 3, -999, 5]
})

# 将特殊值替换为NaN
df_replaced = df.replace(-999, np.nan)
print(df_replaced)

# 替换多个值
df_replaced = df.replace([-999, -1], np.nan)
print(df_replaced)

合理处理缺失值是数据清洗的重要环节,选择合适的方法可以保证数据分析的准确性。