Pandas 数据预处理流程

发布时间:2026/6/3 15:47:19

Pandas 数据预处理流程 文章目录[toc]一、什么是 Pandas 数据预处理二、环境准备 测试数据三、第一步数据探查发现问题四、第二步缺失值处理最常用 4 种方法1. 删除缺失值关键字段必须删2. 文本/分类字段填充3. 数值字段填充中位数最优4. 日期字段填充五、第三步重复值处理1. 全量去重2. 按关键字段去重最常用3. 去重后重置索引六、第四步异常值处理1. 业务规则过滤最实用2. 统计方法过滤IQR 四分位法七、第五步数据格式标准化1. 文本清洗去空格2. 统一数据类型3. 日期标准化万能转换4. 分类字段规整八、第六步特征编码建模必备1. 分类字段独热编码2. 文本标签编码九、第七步数据保存导出干净数据一、什么是 Pandas 数据预处理数据预处理 把原始脏数据变成干净、规范、可用数据的全过程。包含数据加载 → 数据探查 → 缺失值处理 → 重复值处理 → 异常值处理 → 格式标准化 → 特征编码 → 数据保存。二、环境准备 测试数据importpandasaspdimportnumpyasnp# 全局显示优化必加pd.set_option(display.max_columns,None)pd.set_option(display.float_format,lambdax:%.2f%x)# 构造带脏数据的测试集data{id:[1,2,3,4,5,5,6,7,8,9],name:[张三,李四 , 王五,张三,None,赵六,钱七,孙八,周九,吴十],age:[22,35,150,None,28,31,-5,45,29,None],salary:[5000,8000,None,6000,7500,100000,4500,6800,7200,5500],create_time:[2025-01-01,2025/01/02,2025.01.03,2025-01-04,None,2025-01-05,2025-13-01,2025-01-07,2025-01-08,2025-01-09],gender:[男,女,男,男,女,None,女,男,未知,女]}dfpd.DataFrame(data)df_rawdf.copy()# 原始数据备份非常重要三、第一步数据探查发现问题先看清数据有什么问题再动手清洗。# 1. 查看数据结构print(df.shape)df.head()# 2. 查看字段类型与缺失值df.info()# 3. 统计缺失值数量 占比print(缺失值统计)print(df.isna().sum())# 4. 查看重复行print(重复行数,df.duplicated().sum())# 5. 查看数值异常最大/最小print(df.describe())常见问题缺失值None、NaN、空字符串重复行异常值年龄负数、年龄150、工资10万文本带空格日期格式混乱分类字段不规范四、第二步缺失值处理最常用 4 种方法1. 删除缺失值关键字段必须删# 删除 id 为空的行主键不能为空dfdf.dropna(subset[id])# 整行缺失过半删除dfdf.dropna(threshint(df.shape[1]*0.5))2. 文本/分类字段填充df[name]df[name].fillna(未知姓名)df[gender]df[gender].fillna(未知性别)3. 数值字段填充中位数最优# 年龄用中位数填充df[age]df[age].fillna(df[age].median())# 工资用均值填充df[salary]df[salary].fillna(df[salary].mean())4. 日期字段填充df[create_time]df[create_time].fillna(methodffill)# 向前填充五、第三步重复值处理1. 全量去重dfdf.drop_duplicates()2. 按关键字段去重最常用# 按 id 去重保留第一条dfdf.drop_duplicates(subset[id],keepfirst)3. 去重后重置索引dfdf.reset_index(dropTrue)六、第四步异常值处理1. 业务规则过滤最实用# 年龄18~65 岁dfdf[(df[age]18)(df[age]65)]# 工资2000~50000dfdf[(df[salary]2000)(df[salary]50000)]2. 统计方法过滤IQR 四分位法defiqr_clean(data,col):q1data[col].quantile(0.25)q3data[col].quantile(0.75)iqrq3-q1 lowq1-1.5*iqr highq31.5*iqrreturndata[(data[col]low)(data[col]high)]dfiqr_clean(df,salary)七、第五步数据格式标准化1. 文本清洗去空格df[name]df[name].str.strip()2. 统一数据类型df[id]df[id].astype(int)df[age]df[age].astype(int)3. 日期标准化万能转换df[create_time]pd.to_datetime(df[create_time],errorscoerce)4. 分类字段规整# 把“未知”统一替换为 NaNdf[gender]df[gender].replace(未知,np.nan)八、第六步特征编码建模必备1. 分类字段独热编码dfpd.get_dummies(df,columns[gender],prefixgender)2. 文本标签编码fromsklearn.preprocessingimportLabelEncoder leLabelEncoder()df[name_code]le.fit_transform(df[name])九、第七步数据保存导出干净数据df.to_csv(clean_data.csv,indexFalse,encodingutf-8-sig)print(预处理完成数据已保存)

相关新闻