一、核心结论
Pandas是AI数据预处理的核心工具,通过“数据清洗→特征工程→格式转换”流程,配合高效函数(如fillna/groupby/pivot_table),可将数据处理效率提升60%,为模型训练奠定高质量数据基础。
二、数据清洗:从“脏数据”到“可用数据”
1. 缺失值处理:fillna与dropna
- 场景:处理空值(NaN),避免模型训练报错。
- 实战技巧:
- 数值型缺失:用均值/中位数填充(避免极端值影响):
python df['age'].fillna(df['age'].median(), inplace=True) # 中位数填充年龄
- 类别型缺失:用众数或“Unknown”填充:
python df['city'].fillna(df['city'].mode()[0], inplace=True) # 众数填充城市
- 删除无效行:缺失值比例过高时(如>50%):
python df.dropna(subset=['critical_feature'], inplace=True) # 删除关键特征缺失的行
2. 重复值处理:drop_duplicates
- 场景:去除重复数据,避免模型学习冗余信息。
- 实战技巧:
python df.drop_duplicates(subset=['id'], keep='first', inplace=True) # subset:指定去重依据列(如用户ID);keep='first'保留第一条
3. 异常值处理:clip与IQR法则
- 场景:识别并修正极端值(如年龄=200)。
- 实战技巧:
- 截断法:限制数值范围(如年龄1-120岁):
python df['age'] = df['age'].clip(lower=1, upper=120) # 超出范围的强制设为边界值
- IQR法则:删除3倍IQR外的异常值:
python Q1 = df['price'].quantile(0.25) Q3 = df['price'].quantile(0.75) IQR = Q3 - Q1 df = df[(df['price'] >= Q1 - 3*IQR) & (df['price'] <= Q3 + 3*IQR)]
三、特征工程:从“原始数据”到“模型特征”
1. 特征转换:astype与replace
- 场景:数据类型转换(如字符串→数值)、类别映射。
- 实战技巧:
- 类型转换:将“字符串日期”转为datetime:
python df['timestamp'] = pd.to_datetime(df['timestamp'], format='%Y-%m-%d')
- 类别映射:将“男/女”转为0/1:
python df['gender'] = df['gender'].replace({'男': 0, '女': 1})2. 特征提取:str.extract与dt属性
- 场景:从文本/日期中提取关键信息。
- 实战技巧:智优达
- 从文本提取数字(如从“价格:99元”提取99):
python df['price'] = df['text'].str.extract('(\d+)').astype(float) # 正则提取数字- 从日期提取特征(如星期几、月份):
python df['day_of_week'] = df['timestamp'].dt.dayofweek # 0=周一,6=周日
3. 特征聚合:groupby与pivot_table
- 场景:按类别统计(如“各城市平均收入”)。
- 实战技巧:
- 基础聚合:计算各分组均值/总和:
python city_avg_income = df.groupby('city')['income'].mean().reset_index()- 数据透视表:多维度聚合(如“城市×性别”的收入均值):
python pivot = df.pivot_table( index='city', columns='gender', values='income', aggfunc='mean' )
四、数据格式转换:为模型训练准备输入
1. 独热编码:get_dummies
- 场景:将类别特征转为模型可接受的数值(如“城市”→多个0/1列)。
- 实战技巧:
python df = pd.get_dummies(df, columns=['city'], drop_first=True) # columns:指定需编码的列测,drop_first=True去除冗余特征。
2. 标准化/归一化
- 场景:统一数据尺度,提高模型训练效果。智优达
- 实战技巧:
python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df['normalized_value'] = scaler.fit_transform(df['value'])
3. 特征选择:筛选与排序
- 特征选择:通过相关性分析,选择重要特征。
- 代码示例:
python corr = df.corr() print(corr)
4. 数据拆分
- 数据拆分:将数据集分为训练集和测试集。
- 代码示例:
python from sklearn.model_selection import train_test_split X = df.drop('target', axis=1) y = df['target'] X_train, X_test, y_train, X_train, y_train, X_test, y_test = train_test_split(X, y, test_size=0.2, random_state=42)总结:通过合理的预处理,可大幅提升模型性能。建议优先处理数据清洗和特征工程,确保数据质量。