HoRain云--Pandas数据清洗全攻略

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

🐼 Pandas 数据清洗完整指南
根据最新资料,我为您整理了一份全面的 Pandas 数据清洗教程。数据清洗是数据分析中最关键且最耗时的步骤(约占数据科学家 80% 的时间),以下是核心方法和实践技巧:
📋 一、数据清洗核心步骤
┌─────────────────────────────────────────────────────────┐
│ Pandas 数据清洗流程 │
├─────────────────────────────────────────────────────────┤
│ 1. 加载数据 → 2. 诊断问题 → 3. 处理缺失值 │
│ 4. 去重 → 5. 格式标准化 → 6. 异常值处理 → 7. 验证 │
└─────────────────────────────────────────────────────────┘
🔧 二、常用数据清洗方法
1️⃣ 缺失值处理
import pandas as pd
import numpy as np
# 检测缺失值
df.isnull().sum() # 每列缺失值数量
df.isnull().mean() # 每列缺失值比例
df.notnull().sum() # 非缺失值数量
# 删除缺失值
df.dropna() # 删除含缺失值的行
df.dropna(axis=1) # 删除含缺失值的列
df.dropna(thresh=3) # 保留至少有3个非缺失值的行
# 填充缺失值
df.fillna(0) # 填充为0
df.fillna(df.mean()) # 填充为均值
df.fillna(method='ffill') # 前向填充
df.fillna(method='bfill') # 后向填充
df.interpolate() # 插值填充
2️⃣ 重复值处理
# 检测重复值
df.duplicated().sum() # 重复行数量
df.duplicated(subset=['col1']) # 指定列检测
# 删除重复值
df.drop_duplicates() # 删除完全重复的行
df.drop_duplicates(subset=['col1']) # 按指定列去重
df.drop_duplicates(keep='last') # 保留最后一次出现
3️⃣ 数据类型转换
# 类型转换
df.astype({'col1': 'int', 'col2': 'str'})
pd.to_numeric(df['col'], errors='coerce') # 转数值,错误变NaN
pd.to_datetime(df['date_col']) # 转日期
df['col'].astype('category') # 转类别型
# 查看数据类型
df.dtypes
df.info()
4️⃣ 异常值处理
# 方法1:标准差法
mean = df['col'].mean()
std = df['col'].std()
df = df
# 方法2:分位数法
Q1 = df['col'].quantile(0.25)
Q3 = df['col'].quantile(0.75)
IQR = Q3 - Q1
df = df
# 方法3:替换异常值
df['col'] = df['col'].clip(lower=Q1-1.5*IQR, upper=Q3+1.5*IQR)
5️⃣ 数据标准化/格式化
# 字符串处理
df['col'].str.strip() # 去除空格
df['col'].str.lower() # 转小写
df['col'].str.replace('旧', '新') # 替换内容
df['col'].str.split(',') # 分割字符串
# 数值格式化
df['col'].round(2) # 保留2位小数
# 日期格式化
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
6️⃣ 数据筛选与转换
# 条件筛选
df[df['col'] > 100]
df
# 应用自定义函数
df['new_col'] = df['col'].apply(lambda x: x*2)
df['col'] = df['col'].map({'A': 1, 'B': 2})
# 列操作
df.rename(columns={'old': 'new'}) # 重命名列
df.drop(columns=['col1', 'col2']) # 删除列
📊 三、完整清洗示例
def clean_data(df):
"""完整数据清洗流程"""
# 1. 复制数据避免修改原数据
df_clean = df.copy()
# 2. 处理缺失值
df_clean = df_clean.dropna(thresh=len(df_clean.columns)*0.5) # 保留至少50%非空
numeric_cols = df_clean.select_dtypes(include=[np.number]).columns
df_clean[numeric_cols] = df_clean[numeric_cols].fillna(df_clean[numeric_cols].mean())
# 3. 去重
df_clean = df_clean.drop_duplicates()
# 4. 处理异常值
for col in numeric_cols:
Q1 = df_clean[col].quantile(0.25)
Q3 = df_clean[col].quantile(0.75)
IQR = Q3 - Q1
df_clean[col] = df_clean[col].clip(Q1-1.5*IQR, Q3+1.5*IQR)
# 5. 重置索引
df_clean = df_clean.reset_index(drop=True)
return df_clean
# 使用
df_cleaned = clean_data(df)
⚡ 四、千万级大数据优化技巧
| 优化方法 | 说明 | 性能提升 |
|---|---|---|
dtype 优化 |
使用合适的数据类型(如 category) | 50-80% |
| 分块处理 | pd.read_csv(chunksize=10000) |
内存友好 |
| 向量化操作 | 避免 apply,使用内置函数 | 10-100倍 |
| 并行处理 | 使用 dask 或 modin |
多核加速 |
| 内存优化 | df.memory_usage(deep=True) 分析 |
减少占用 |
✅ 五、清洗质量验证
# 验证清单
def validate_cleaning(df):
print("缺失值比例:", df.isnull().mean().round(3))
print("重复值数量:", df.duplicated().sum())
print("数据类型:\n", df.dtypes)
print("统计信息:\n", df.describe())
print("唯一值数量:\n", df.nunique())
💡 最佳实践建议
- 始终保留原始数据副本 - 使用
df.copy() - 记录清洗步骤 - 便于复现和审计
- 逐步验证 - 每步清洗后检查数据质量
- 自动化流程 - 将清洗步骤封装成函数
- 处理大数据时 - 考虑使用 Dask、Polars 等替代方案
如需了解特定场景的数据清洗方法(如时间序列、文本数据、爬虫数据等),请告诉我,我可以提供更详细的指导!
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)