Python数据清洗:用优雅的方式处理缺失值
在实际数据工作中,遇到缺失值是家常便饭。许多新手习惯用简单的删除或零值填充,但这往往会导致信息损失或偏差。今天分享几种更优雅的Python解决方案。
传统方法的局限性
# 常见但不推荐的做法
df.dropna() # 直接删除缺失行
df.fillna(0) # 用零填充所有缺失
这些方法简单粗暴,可能破坏数据分布或引入偏差。
更智能的填充策略
Pandas提供了多种情境化填充方式:
import pandas as pd
import numpy as np
# 前向/后向填充(时间序列数据)
df.fillna(method='ffill') # 用前一个有效值填充
df.fillna(method='bfill') # 用后一个有效值填充
# 分列差异化处理
df['数值列'] = df['数值列'].fillna(df['数值列'].median())
df['类别列'] = df['类别列'].fillna(df['类别列'].mode()[0])
使用Scikit-learn的智能填充
对于复杂场景,SimpleImputer提供了更多选项:
from sklearn.impute import SimpleImputer
# 均值填充
imputer = SimpleImputer(strategy='mean')
numeric_data = imputer.fit_transform(df.select_dtypes(include=[np.number]))
高级技巧:标记缺失值
有时保留缺失信息本身很重要:
df['列名_缺失'] = df['列名'].isna().astype(int)
结语
处理缺失值没有一成不变的方案,关键是根据数据特性和业务场景选择合适的方法。建议始终记录数据处理步骤,并在模型评估时考虑缺失值处理对结果的影响。
小提示:处理前,先用df.isna().sum()了解各列缺失情况,制定针对性策略。
下次面对缺失数据时,不妨试试这些更精细的方法,让你的数据分析更加稳健可靠。