使用Python进行数据清洗:从原始数据到结构化信息

今天 3阅读

在大数据时代,数据清洗是数据分析和机器学习流程中至关重要的一步。无论我们是从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

可以看到,QuantityPrice 列各有一个缺失值。

处理缺失值的方法:

删除含有缺失值的行或列用平均值、中位数或众数填充使用插值法或模型预测填充

这里我们选择用中位数填充数值型缺失值:

# 填充缺失值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 等工具,实现更复杂的数据预处理任务。

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

目录[+]

您是本站第69425名访客 今日有16篇新文章

微信号复制成功

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