Pandas:数据处理与转换
2025-02-17
1. 数据清洗
1.1 处理重复数据
import pandas as pd
# 检查重复行
duplicates = df.duplicated()
# 删除重复行
df_clean = df.drop_duplicates()
# 基于特定列删除重复行
df_clean = df.drop_duplicates(subset=['姓名', '年龄'])
# 保留最后一次出现的重复行
df_clean = df.drop_duplicates(keep='last')1.2 处理异常值
# 使用统计方法识别异常值
Q1 = df['年龄'].quantile(0.25)
Q3 = df['年龄'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 过滤异常值
df_clean = df[(df['年龄'] >= lower_bound) & (df['年龄'] <= upper_bound)]
# 使用 clip 方法处理异常值
df['年龄'] = df['年龄'].clip(lower=lower_bound, upper=upper_bound)2. 数据转换
2.1 类型转换
# 数值类型转换
df['年龄'] = pd.to_numeric(df['年龄'], errors='coerce') # 无效值转为 NaN
df['工资'] = df['工资'].astype('float32') # 指定精度
# 日期类型转换
df['日期'] = pd.to_datetime(df['日期']) # 字符串转日期
df['年份'] = df['日期'].dt.year # 提取年份
df['月份'] = df['日期'].dt.month # 提取月份
# 类别类型转换
df['城市'] = df['城市'].astype('category') # 转换为类别类型2.2 数据规范化
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# 最小-最大规范化 (0-1缩放)
scaler = MinMaxScaler()
df['年龄_scaled'] = scaler.fit_transform(df[['年龄']])
# 标准化 (Z-score标准化)
scaler = StandardScaler()
df['工资_scaled'] = scaler.fit_transform(df[['工资']])3. 数据重塑
3.1 透视表操作
# 创建透视表
pivot_table = pd.pivot_table(df,
values='工资',
index=['部门'],
columns=['职位'],
aggfunc='mean')
# 长格式转宽格式
wide_df = df.pivot(index='日期',
columns='部门',
values='销售额')3.2 数据融合
# 合并数据框
merged_df = pd.merge(df1, df2,
on='员工ID', # 指定连接键
how='left') # 指定连接方式
# 连接数据框
concatenated_df = pd.concat([df1, df2],
axis=0, # 0表示垂直连接
ignore_index=True)4. 高级转换技巧
4.1 自定义转换函数
# 使用 apply 应用自定义函数
def age_category(age):
if age < 25:
return '青年'
elif age < 45:
return '中年'
else:
return '老年'
df['年龄段'] = df['年龄'].apply(age_category)
# 使用 transform 进行分组转换
df['工资_标准化'] = df.groupby('部门')['工资'].transform(lambda x: (x - x.mean()) / x.std())4.2 窗口计算
# 移动平均
df['销售额_MA7'] = df['销售额'].rolling(window=7).mean()
# 累计统计
df['累计销售额'] = df.groupby('部门')['销售额'].cumsum()
# 滑动窗口计算
df['销售额_增长率'] = df.groupby('部门')['销售额'].pct_change()5. 性能优化建议
减少内存使用:
- 使用适当的数据类型(如 category 类型)
- 及时删除不需要的临时变量
提高计算效率:
- 尽量使用向量化操作而不是循环
- 合理使用 inplace=True 参数避免创建副本
处理大数据集:
- 使用 chunksize 参数分块读取数据
- 考虑使用 dask 或其他分布式计算框架
总结
- 数据处理和转换是数据分析中最重要的步骤之一
- Pandas 提供了丰富的工具和方法进行数据转换
- 选择合适的转换方法可以显著提高数据处理效率
- 注意数据类型和内存使用对性能的影响
提示:在进行数据转换时,建议先在小数据集上测试代码,确保转换逻辑正确后再应用到完整数据集。同时,重要的转换操作后要及时检查数据的完整性和准确性。