Python数据清洗常用代码实例与操作指南

阿橙
阿橙
发布时间:2026-10-11 | 2人浏览过
原创

本文系统整理Python数据清洗的核心代码实例,涵盖多格式文件读写、时间序列处理、分组聚合运算、多表合并、缺失值填补及行列转换等高频场景。通过标准化pandas操作与内置函数,提供可直接复制运行的脚本模板,帮助开发者快速提升数据处理效率。

数据读取与导出基础

批量读取CSV与TXT文件

针对结构化数据,pandas 提供了高效的文件读写接口。读取CSV时可通过 encoding 指定编码格式(如 utf-8 或 gbk),并通过 sep 自定义分隔符。若遇到 ParserError: Error tokenizing data. 报错,通常是因为实际分隔符与默认逗号不符,调整 sep=\"\\t\" 即可解决。

import pandas as pd

# 读取单文件(推荐显式指定编码与分隔符)
df = pd.read_csv("data.csv", encoding="utf-8-sig", sep=",")

当数据分散在多个文件夹中时,可结合 glob 遍历路径并逐层合并。注意在拼接循环内的数据框时使用正确的变量名,避免引用未定义对象。

import glob
import os

base_dir = "./obj/"
combined_df = pd.DataFrame()

for job_folder in glob.glob(os.path.join(base_dir, "job_id=")):
    csv_files = sorted(glob.glob(os.path.join(job_folder, "job_id=*.csv")))
    if not csv_files:
        continue
    # 假设第一个文件包含表头,后续文件需跳过header或对齐列名
    chunk_df = pd.concat([pd.read_csv(f) for f in csv_files], ignore_index=True)
    combined_df = pd.concat([combined_df, chunk_df], ignore_index=True)

TXT纯文本处理推荐使用 with open() 上下文管理器,确保文件指针自动关闭。每行数据以字符串形式返回,配合 .strip() 清除末尾换行符,.split() 按空格或制表符切分为列表,便于后续清洗提取。

with open("sample.txt", encoding="utf-8") as f:
    for line in f:
        cleaned_line = line.strip()
        fields = cleaned_line.split()

规范化导出数据

完成清洗后,可使用 to_csv() 写入磁盘。设置 index=False 隐藏行索引,encoding 统一为 utf-8 以避免跨平台乱码。若文件已存在,该操作会直接覆盖原文件,建议在执行前备份关键数据。

combined_df.to_csv("cleaned_output.csv", index=False, encoding="utf-8")

时间序列与日期处理

业务报表常涉及时间计算与格式化。利用 datetime 模块或 pandas 内置方法可快速完成加减法、星期判断与周期划分。

  • 时间加减与格式转换:
    import datetime
    start_str = "2022-01-12 12:11:00"
    time_obj = datetime.datetime.strptime(start_str, "%Y-%m-%d %H:%M:%S")
    time_obj += datetime.timedelta(minutes=5)
    print(time_obj.strftime("%Y-%m-%d %H:%M:%S"))
  • 判断星期几:
    df = pd.DataFrame({"day": ["2021-11-12", "2021-11-13", "2021-11-14"}])
    pd.to_datetime(df["day"]).dt.weekday + 1  # 返回 5,6,7(周五至周日)
  • 计算年内周数:
    pd.to_datetime("2021-11-12").isocalendar()[1]  # 获取ISO年份的第几周
  • 生成时间等差数列:
    注:新版 pandas 已弃用 inclusive 参数,改为 closed。
    pd.date_range(start="2021-11-12", end="2021-11-14", freq="1h", closed="left")

数据分组聚合与批量运算

groupby 是进行特征统计的核心工具。可基于单列或多列(传入列表)分组,并结合 agg() 调用多种聚合函数,代码更紧凑。

df = pd.DataFrame({"性别": ["男","女","女","男","男"], 
                   "身高": [179,160,167,170,169]})
df.groupby("性别")["身高"].mean().reset_index()

# 多指标同计算
df.groupby("性别")["身高"].agg(["mean", "max", "min"]).reset_index()

对非数值型字段或复杂逻辑,可使用 apply() 逐行/逐列执行自定义函数。批量映射替换推荐使用字典映射:

gender_dict = {"男": "Man", "女": "Woman"}
df["性别"].map(gender_dict)

表结构合并与缺失值清理

多源数据整合依赖 merge 与 concat。前者类似 SQL JOIN,支持 inner/outer/left/right 连接模式,通过 on 指定关联键;后者用于纵向堆叠(axis=0)或横向拼接(axis=1),join 控制保留全集还是交集。

# 生成笛卡尔积示例
pd.merge(df1, df2, on="value").drop("value", axis=1)

缺失值处理遵循 “识别 → 填充/删除 → 校验” 流程:
- isnull() / notnull():快速定位空值分布。
- fillna(value):按固定值、均值或插值法填补,设置 inplace=True 可原地修改。
- dropna(axis=0, how="any"):剔除含有空值的行("all" 表示全为空才删)。

行列转换与常用快捷技巧

宽窄表切换常用于适配机器学习输入要求。长转宽使用 pivot_table(index=<行键>, columns=<列键>, values=<值>);宽转长使用 melt(id_vars=[<保留列>], var_name="属性", value_name="数值")。

日常清洗中还需掌握以下快捷操作:

  • sort_values(by="<列名>") 实现多列或单列排序
  • reset_index() 将当前索引重置为普通列
  • drop_duplicates() 精准去重
  • str.slice() 与 str.split() 配合正则表达式切割复杂文本
  • 原生列表解析式 [func(i) for i in lst] 替代低效循环,性能显著提升

以上内容涵盖了从文件导入到多维清洗、表结构重组的标准工作流。掌握这些Pandas与Python内置函数的组合用法,可大幅降低手动处理数据的冗余步骤。以上就是Python数据清洗代码实例与pandas高效处理技巧的详细内容,更多关于Python数据处理与自动化脚本开发的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表