使用Python进行数据清洗:从原始数据到结构化信息
在大数据时代,数据清洗是数据分析和机器学习流程中至关重要的一步。无论我们是从API获取数据、爬取网页内容,还是处理传感器日志,原始数据往往都存在缺失值、格式不统异常值等问题。本文将介绍如何使用Python进行数据清洗,并通过一个完整的代码示例展示整个过程。
什么是数据清洗?
数据清洗(Data Cleaning)是指检测并修正数据集中的错误和冗余数据的过程。其目的是提高数据质量,从而为后续的数据分析或建模提供可靠的基础。
常见的数据问题包括:
缺失值(Missing Values)异常值(Outliers)重复数据(Duplicates)格式错误(如日期格式不一致、单位不统一等)工具选择:Pandas 是数据清洗的利器
Python 中最常用的数据清洗工具是 Pandas 库。它提供了高效的数据结构(如 DataFrame),以及丰富的数据操作函数,非常适合处理结构化数据。
安装 Pandas
如果你尚未安装 Pandas,可以使用以下命令安装:
pip install pandas
实战案例:清洗销售数据
我们将以一个虚构的“销售记录”数据集为例,演示如何使用 Pandas 进行数据清洗。该数据集包含以下字段:
字段名 | 描述 |
---|---|
OrderID | 订单编号 |
ProductName | 商品名称 |
Quantity | 销售数量 |
Price | 单价 |
SaleDate | 销售日期 |
步骤1:导入必要的库并加载数据
import pandas as pd# 加载数据df = pd.read_csv("sales_data.csv")# 显示前几行数据print(df.head())
假设原始数据如下所示:
OrderID ProductName Quantity Price SaleDate0 1001 iPhoneX 2.0 999.99 2023-04-011 1002 GalaxyS NaN 799.0 2023-05-012 1003 iPad -5.0 499.99 2023/06/013 1004 GalaxyS 3.0 nan 2023-07-014 1005 MacBook Pro 10.0 1999.99 2023-08-01
步骤2:检查缺失值
我们可以使用 isnull()
和 sum()
方法来统计每个字段的缺失值数量。
# 检查缺失值print(df.isnull().sum())
输出结果可能如下:
OrderID 0ProductName 0Quantity 1Price 1SaleDate 0dtype: int64
可以看到,Quantity
和 Price
列各有一个缺失值。
处理缺失值的方法:
删除含有缺失值的行或列用平均值、中位数或众数填充使用插值法或模型预测填充这里我们选择用中位数填充数值型缺失值:
# 填充缺失值df['Quantity'].fillna(df['Quantity'].median(), inplace=True)df['Price'].fillna(df['Price'].median(), inplace=True)# 再次检查缺失值print(df.isnull().sum())
步骤3:处理异常值
观察 Quantity
字段发现有一条记录为 -5
,这在销售数量中显然是不合逻辑的。
我们可以设定规则过滤掉不合理值:
# 过滤掉数量小于等于0的记录df = df[df['Quantity'] > 0]# 查看修改后的数据print(df.head())
步骤4:统一日期格式
我们注意到 SaleDate
的格式并不统一,有些是 YYYY-MM-DD
,有些是 YYYY/MM/DD
。我们需要将其统一转换为标准格式。
# 转换日期格式df['SaleDate'] = pd.to_datetime(df['SaleDate'])# 查看结果print(df.dtypes)
现在 SaleDate
字段类型应为 datetime64[ns]
。
步骤5:去除重复数据
有时候,同一订单可能会被重复录入。我们可以使用 drop_duplicates()
方法去除重复行。
# 去重df.drop_duplicates(subset=['OrderID'], keep='first', inplace=True)# 查看去重后数据量print(len(df))
步骤6:添加衍生字段(可选)
有时我们还需要根据现有字段生成新字段,例如计算销售额:
# 添加销售额字段df['TotalSales'] = df['Quantity'] * df['Price']# 查看新增字段print(df[['Quantity', 'Price', 'TotalSales']].head())
输出示例:
Quantity Price TotalSales0 2.0 999.99 1999.982 3.0 799.00 2397.003 3.0 799.00 2397.004 10.0 1999.99 19999.90
步骤7:保存清洗后的数据
最后,我们可以将清洗后的数据保存为新的CSV文件供后续使用。
# 保存数据df.to_csv("cleaned_sales_data.csv", index=False)
总结
本篇文章介绍了使用 Python 和 Pandas 进行数据清洗的完整流程,包括:
导入数据检查并处理缺失值处理异常值统一日期格式去除重复数据添加衍生字段保存清洗后的数据数据清洗是一项需要结合业务背景与数据特性的技术活,掌握基本方法之后,还需根据不同场景灵活应用。希望本文能帮助你更好地理解和实践数据清洗工作。
附录:完整代码
import pandas as pd# 加载数据df = pd.read_csv("sales_data.csv")# 检查缺失值print(df.isnull().sum())# 填充缺失值df['Quantity'].fillna(df['Quantity'].median(), inplace=True)df['Price'].fillna(df['Price'].median(), inplace=True)# 过滤异常值df = df[df['Quantity'] > 0]# 转换日期格式df['SaleDate'] = pd.to_datetime(df['SaleDate'])# 去重df.drop_duplicates(subset=['OrderID'], keep='first', inplace=True)# 添加销售额字段df['TotalSales'] = df['Quantity'] * df['Price']# 保存数据df.to_csv("cleaned_sales_data.csv", index=False)# 输出最终数据print(df.head())
如需进一步提升数据清洗能力,建议结合 NumPy、Scikit-learn 或 PySpark 等工具,实现更复杂的数据预处理任务。