使用Python进行数据清洗:技术详解与实战示例

07-02 11阅读

在大数据时代,数据质量直接决定了分析结果的可靠性。无论是机器学习、数据可视化还是业务决策支持,数据清洗(Data Cleaning) 都是不可或缺的第一步。本文将详细介绍数据清洗的概念、常见问题及处理方法,并通过完整的Python代码演示如何对真实数据集进行清洗。


什么是数据清洗?

数据清洗是指识别并纠正数据集中错误、重复、缺失或无效的数据的过程。其主要目标是提高数据质量,从而提升后续分析和建模的准确性。

常见的数据质量问题包括:

缺失值(Missing Values)异常值(Outliers)重复数据(Duplicate Records)数据类型不一致(Inconsistent Data Types)格式错误(Formatting Issues)

为什么需要数据清洗?

提升模型性能:干净的数据有助于训练更准确的机器学习模型。避免误导性:脏数据可能导致错误的统计推断。节省计算资源:减少冗余数据可以加快处理速度。增强数据可信度:对于报告和决策系统来说,数据质量至关重要。

数据清洗流程概述

加载原始数据检查缺失值处理缺失值删除重复记录处理异常值数据类型转换数据标准化/格式化保存清洗后的数据

实战演练:使用Pandas进行数据清洗

我们将使用一个虚构的销售数据集作为示例。数据包含以下字段:

字段名描述
OrderID订单编号
CustomerName客户名称
Product产品名称
Quantity销售数量
Price单价
OrderDate下单日期

1. 导入必要的库

import pandas as pdimport numpy as np

2. 加载原始数据

# 假设我们有一个CSV文件 'sales_data.csv'df = pd.read_csv('sales_data.csv')print(df.head())

输出示例:

   OrderID CustomerName    Product  Quantity  Price    OrderDate0     1001       Alice     Laptop       NaN   1200  2024-01-011     1002        Bob     Monitor        2     -1  2024-02-152     1003       None       Mouse        5     20   invalid_date3     1004       Alice      Keyboard      10    150  2024-03-104     1005       David      Printer       1    300  2024-04-01

我们可以看到,这个数据中存在以下问题:

Quantity 列中有缺失值(NaN)Price 列中有负数CustomerName 中有空值OrderDate 中有非法日期格式

3. 检查缺失值

print(df.isnull().sum())

输出:

OrderID         0CustomerName    1Product         0Quantity        1Price           0OrderDate       1dtype: int64

4. 处理缺失值

a. 删除含有缺失值的行(适用于小部分缺失)

df_cleaned = df.dropna()

b. 填充缺失值(推荐用于重要字段)

df['CustomerName'] = df['CustomerName'].fillna('Unknown')df['Quantity'] = df['Quantity'].fillna(df['Quantity'].median())

5. 删除重复记录

df_cleaned = df.drop_duplicates()

6. 处理异常值

a. 数量为负或零的情况

df = df[df['Quantity'] > 0]

b. 价格为负数的情况

df = df[df['Price'] >= 0]

7. 转换数据类型与处理日期格式

a. 将 Quantity 转换为整数

df['Quantity'] = df['Quantity'].astype(int)

b. 转换 OrderDate 为标准日期格式

df['OrderDate'] = pd.to_datetime(df['OrderDate'], errors='coerce')

这会自动将无法解析的日期设置为 NaT(Not a Time),我们可以选择删除这些行:

df = df.dropna(subset=['OrderDate'])

8. 数据标准化(如客户名统一大小写)

df['CustomerName'] = df['CustomerName'].str.title()

9. 最终查看清洗后的数据

print(df.info())print(df.head())

完整代码汇总

import pandas as pdimport numpy as np# 读取数据df = pd.read_csv('sales_data.csv')# 显示前几行数据print("原始数据预览:")print(df.head())# 检查缺失值print("\n缺失值统计:")print(df.isnull().sum())# 填充缺失值df['CustomerName'] = df['CustomerName'].fillna('Unknown')df['Quantity'] = df['Quantity'].fillna(df['Quantity'].median())# 删除异常值df = df[(df['Quantity'] > 0) & (df['Price'] >= 0)]# 转换数据类型df['Quantity'] = df['Quantity'].astype(int)# 处理日期格式df['OrderDate'] = pd.to_datetime(df['OrderDate'], errors='coerce')# 删除非法日期行df = df.dropna(subset=['OrderDate'])# 标准化客户名df['CustomerName'] = df['CustomerName'].str.title()# 删除重复行df = df.drop_duplicates()# 输出清洗后数据print("\n清洗后数据预览:")print(df.head())# 保存到新文件df.to_csv('cleaned_sales_data.csv', index=False)

总结

数据清洗是一个细致而繁琐的过程,但却是数据分析工作的基石。通过本文的介绍和Python代码示例,你已经掌握了如何使用 Pandas 对数据进行缺失值处理、异常值过滤、数据格式转换等操作。

随着数据来源的多样化,数据清洗的技术也在不断发展。建议在实际项目中结合领域知识灵活运用这些方法,并借助自动化脚本提升效率。


扩展阅读与工具推荐

Pandas官方文档https://pandas.pydata.orgOpenRefine:开源的数据清洗工具,适合非编程用户Dask:用于处理超大CSV文件的数据清洗工具Scikit-learn 的 SimpleImputer:用于更复杂的缺失值填充策略

如果你希望进一步自动化数据清洗流程,还可以考虑构建ETL管道(Extract, Transform, Load)来实现每日定时清洗任务。


字数统计:约1600字

如需生成PDF版本或Markdown格式,请告知我!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第888名访客 今日有13篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!