🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

🐼 Pandas 数据清洗完整指南

📋 一、数据清洗核心步骤

🔧 二、常用数据清洗方法

1️⃣ 缺失值处理

2️⃣ 重复值处理

3️⃣ 数据类型转换

4️⃣ 异常值处理

5️⃣ 数据标准化/格式化

6️⃣ 数据筛选与转换

📊 三、完整清洗示例

⚡ 四、千万级大数据优化技巧

✅ 五、清洗质量验证

💡 最佳实践建议


img

🐼 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倍
并行处理 使用 daskmodin 多核加速
内存优化 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())

💡 最佳实践建议

  1. 始终保留原始数据副本 - 使用 df.copy()
  2. 记录清洗步骤 - 便于复现和审计
  3. 逐步验证 - 每步清洗后检查数据质量
  4. 自动化流程 - 将清洗步骤封装成函数
  5. 处理大数据时 - 考虑使用 Dask、Polars 等替代方案

如需了解特定场景的数据清洗方法(如时间序列、文本数据、爬虫数据等),请告诉我,我可以提供更详细的指导!

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐