使用 Python 进行数据清理和净化

PythonBeginner
立即练习

介绍

在这个项目中,你将学习如何通过去除不完整、不正确和无效的数据来清理和净化 CSV 数据。目标是从原始数据中创建一个干净的数据集,可用于进一步的分析或处理。

🎯 任务

在这个项目中,你将学习:

  • 如何设置项目环境并准备必要的文件
  • 如何导入数据清理所需的库
  • 如何读取和处理原始数据,检查各种类型的脏数据
  • 如何将清理后的数据写入新的 CSV 文件

🏆 成果

完成这个项目后,你将能够:

  • 使用 Python 及其标准库处理 CSV 数据
  • 应用数据验证和清理技术,如检查缺失值、无效格式和不切实际的数据
  • 实施数据清理过程以创建高质量的数据集
  • 生成包含清理后数据的新 CSV 文件

了解数据格式

在这一步中,你将在数据清理过程之前了解数据情况。

  1. 导航到/home/labex/project目录。
  2. 在项目目录中,你应该会找到一个raw_data.csv文件。此文件包含需要清理的原始数据。
  3. 打开raw_data.csv文件,你可以看到所有列,其正确格式应为:
    • 姓名列:超过 1 个单词。
    • 性别列:预期为'F'或'M'。
    • 出生日期列:格式为%Y-%m-%d
    • 电子邮件列:符合username@domain.com

导入必要的库

在这一步中,你将导入数据清理过程所需的库。

  1. 在文本编辑器中打开data_clean.py文件。

  2. 在文件开头添加以下代码:

import csv
import re
from datetime import datetime

这些库将用于处理 CSV 文件、正则表达式以及日期/时间操作。

初始化清理后的数据列表

在这一步中,你将创建一个空列表来存储清理后的数据。

  1. data_clean.py文件中,在导入语句下方添加以下代码:
## 初始化一个空列表来存储清理后的数据
clean_data = []

这个列表将用于存储清理后的数据行。

读取并处理原始数据

在这一步中,你将从raw_data.csv文件读取原始数据,处理每一行,并将有效的行添加到clean_data列表中。

  1. data_clean.py文件中,在clean_data列表初始化下方添加以下代码:
## 打开并读取原始数据 CSV 文件
with open("raw_data.csv", "r") as f:
    reader = csv.DictReader(f)  ## 使用 DictReader 以便按名称轻松访问列
    for row in reader:
        ## 从每一行中提取相关字段
        name = row["name"]
        sex = row["gender"]
        date = row["birth date"]
        mail = row["mail"]

        ## 检查名字字段是否为空,如果为空则跳过该行
        if len(name) < 1:
            continue

        ## 检查性别字段是否有效('M' 或 'F'),如果无效则跳过该行
        if sex not in ["M", "F"]:
            continue

        ## 尝试解析出生日期并计算年龄;如果解析失败则跳过该行
        try:
            date = datetime.strptime(date, "%Y-%m-%d")
        except ValueError:
            continue
        age = datetime.now().year - date.year
        ## 如果计算出的年龄不切实际(小于 0 或大于 200),则跳过该行
        if age < 0 or age > 200:
            continue

        ## 定义用于验证电子邮件地址的正则表达式模式
        r = r"^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}$"
        ## 检查电子邮件字段是否与正则表达式模式匹配,如果不匹配则跳过该行
        if not re.match(r, mail):
            continue

        ## 如果所有检查都通过,则将该行追加到清理后的数据列表中
        clean_data.append(row)

这段代码从raw_data.csv文件读取原始数据,处理每一行,并将有效的行添加到clean_data列表中。

将清理后的数据写入新的 CSV 文件

在这一步中,你将把clean_data列表中清理后的数据写入一个名为clean_data.csv的新 CSV 文件。

  1. data_clean.py文件中,在数据处理部分下方添加以下代码:
## 将清理后的数据写入新的 CSV 文件
with open("clean_data.csv", "w", newline="") as f:
    writer = csv.DictWriter(
        f, fieldnames=row.keys()
    )  ## 使用 DictWriter 按列名写入
    writer.writeheader()  ## 写入标题行
    writer.writerows(clean_data)  ## 写入所有清理后的行

这段代码创建了一个名为clean_data.csv的新 CSV 文件,并将clean_data列表中清理后的数据写入其中。

运行数据清理脚本

在这最后一步中,你将运行data_clean.py脚本来生成clean_data.csv文件。

  1. 保存data_clean.py文件。

  2. 如果尚未进入,请在终端中导航到/home/labex/project目录。

  3. 运行以下命令来执行数据清理脚本:

python data_clean.py

运行脚本后,你应该会在/home/labex/project目录中找到一个新的clean_data.csv文件,其中包含清理后的数据。

恭喜!你已成功完成 CSV 数据净化项目。

总结

恭喜!你已完成此项目。你可以在 LabEx 中练习更多实验以提升你的技能。

✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习