找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

861

积分

0

好友

115

主题
发表于 9 小时前 | 查看: 0| 回复: 0

小伙伴们是否有过这样的烦恼?领导或同事发来几十份格式相似的销售数据文件(CSV或Excel格式),要求你汇总统计、清洗数据、按月份拆分。如果依然沿用传统方法,在Excel里一个个手动打开、复制粘贴、制作透视表,不仅效率低下、容易出错,还可能因为文件过大导致软件卡顿,加班到深夜都难以完成。

其实,利用Python的Pandas库,只需几行代码就能自动化完成这些重复性劳动。今天,我们就来手把手教你如何从零开始,掌握使用Pandas批量处理CSV和Excel文件的核心技巧,彻底解放你的双手,提升数据分析效率。即便是编程新手,也可以直接复用文中的代码块。

为什么选择Pandas进行批量处理?

在对比Excel等传统工具后,Pandas的优势显而易见:

  • Excel:通常一次只能处理一个文件,进行大量重复操作时效率低,且面对海量数据时容易崩溃或卡顿。
  • Pandas:可以编写脚本一次性读取成百上千个文件,并支持进行统一的数据清洗、计算、转换和保存,处理速度极快,并能完全杜绝人为操作失误。

环境准备:安装必要的库

开始之前,请确保你的Python环境中已安装Pandas。由于需要处理Excel文件,还需安装对应的引擎库。打开命令行终端,执行以下安装命令:

pip install pandas openpyxl xlrd
  • pandas:数据分析的核心库。
  • openpyxl:用于读写新版 .xlsx 格式的Excel文件。
  • xlrd:用于读取旧版 .xls 格式的Excel文件(如果只处理CSV文件,可不安装)。

在代码开头,导入我们将要使用的库:

import pandas as pd
import glob  # 用于查找匹配特定模式的所有文件路径

第一步:批量读取文件(核心技巧)

我们从读取单个文件开始,这是基础,然后轻松升级到批量读取。

1. 读取单个文件

Pandas为不同格式的文件提供了直接的读取函数。

# 读取CSV文件(最常用,参数简单)
df_csv = pd.read_csv("销售数据_1月.csv")

# 读取Excel文件(需指定engine参数以确保兼容性)
df_excel = pd.read_excel("销售数据_2月.xlsx", engine="openpyxl")  # .xlsx 文件使用 openpyxl
# df_excel = pd.read_excel("旧版数据.xls", engine="xlrd")  # .xls 文件使用 xlrd

# 查看数据前5行,验证读取是否成功
print("CSV文件前5行:")
print(df_csv.head())
print("\nExcel文件前5行:")
print(df_excel.head())

2. 批量读取多个文件(解放双手的关键)

假设你的“销售数据文件夹”内存放了大量格式一致的销售数据_1月.csv销售数据_2月.csv等文件。使用glob模块可以轻松获取所有文件路径,然后循环读取并合并。

# 步骤1:使用glob查找指定文件夹下的所有CSV文件
file_paths = glob.glob("销售数据文件夹/*.csv")  # 匹配“销售数据文件夹”下所有.csv文件
# 若要读取Excel文件,可修改为:glob.glob("销售数据文件夹/*.xlsx")

# 步骤2:循环读取每个文件,并将DataFrame存入列表
df_list = []
for path in file_paths:
    df = pd.read_csv(path)  # 读取单个文件
    # 可选操作:从文件名中提取月份信息,并添加为新列
    df["月份"] = path.split("_")[-1].replace(".csv", "")
    df_list.append(df)

# 步骤3:使用pd.concat合并列表中的所有DataFrame
total_df = pd.concat(df_list, ignore_index=True)  # ignore_index=True 会重置行索引,使其连续

# 查看合并后的数据总览
print(f"合并后共 {len(total_df)} 行数据")
print(total_df.head(10))

关键说明

  • glob.glob(“路径/*.csv”):自动扫描并返回所有匹配的文件路径,无需手动输入每个文件名。
  • pd.concat():这是实现批量处理的核心函数,它将多个数据结构纵向堆叠,合并成一个完整的DataFrame,后续所有操作都基于这个统一的数据集。

第二步:对合并后的数据进行批量处理

现在,所有数据都在total_df这个DataFrame中,我们可以一次性完成各种清洗、计算和转换操作。以下是三个最常用的场景。

场景1:批量数据清洗(去重与缺失值处理)

# 1. 删除完全重复的行
total_df = total_df.drop_duplicates()

# 2. 填充缺失值
total_df["销售额"] = total_df["销售额"].fillna(0)  # 数值列用0填充
total_df["客户名称"] = total_df["客户名称"].fillna("未知")  # 文本列用“未知”填充

# 3. 统一数据格式(例如,将销售额列转换为整数类型)
total_df["销售额"] = total_df["销售额"].astype(int)

场景2:批量计算统计值(分组聚合)

告别Excel透视表,用一行代码完成月度统计。

# 按“月份”分组,计算每月的总销售额和唯一订单数
monthly_stats = total_df.groupby("月份").agg(
    总销售额=("销售额", "sum"),
    订单总数=("订单号", "nunique")  # nunique 用于统计不重复的个数
).reset_index()

print("每月销售统计:")
print(monthly_stats)

场景3:批量修改与新增数据

# 1. 新增“利润”列(假设利润率为30%)
total_df["利润"] = total_df["销售额"] * 0.3

# 2. 批量修改“地区”列中的值,统一格式
total_df["地区"] = total_df["地区"].str.replace("北京", "北京市")
total_df["地区"] = total_df["地区"].str.replace("上海", "上海市")

第三步:批量保存处理结果

数据处理完毕后,可以根据需求保存为一个汇总文件,或按条件拆分为多个文件。

1. 保存为单个汇总文件

# 保存为CSV格式(通用性好,文件体积小)
total_df.to_csv("合并后的销售数据_2024.csv", index=False)  # index=False 表示不保存行索引

# 保存为Excel格式(便于直接展示和汇报)
total_df.to_excel("合并后的销售数据_2024.xlsx", index=False, engine="openpyxl")

print("汇总文件保存成功!")

2. 按条件批量保存为多个文件(例如按月份拆分)

如果需要将处理好的数据按月份拆分开来交给不同部门,也可以轻松实现。

# 按“月份”分组,将每个分组保存为一个独立的Excel文件
for month, group_df in total_df.groupby("月份"):
    group_df.to_excel(f"2024年{month}销售数据_处理后.xlsx", index=False, engine="openpyxl")

print("所有月份文件已拆分保存成功!")

运行后,你的文件夹中会自动生成类似 2024年1月销售数据_处理后.xlsx2024年2月销售数据_处理后.xlsx 的文件。

完整实战案例:一键汇总12个月的销售数据

将上述所有步骤整合,得到一份可直接运行的完整脚本,用于处理“销售数据文件夹”中12个月的CSV文件。

# 完整代码:批量读取 -> 合并 -> 清洗 -> 统计 -> 保存
import pandas as pd
import glob

# 1. 批量读取文件
file_paths = glob.glob("销售数据文件夹/*.csv")
df_list = []
for path in file_paths:
    df = pd.read_csv(path)
    df["月份"] = path.split("_")[-1].replace(".csv", "")  # 从文件名提取月份
    df_list.append(df)

# 2. 合并数据
total_df = pd.concat(df_list, ignore_index=True)

# 3. 清洗数据
total_df = total_df.drop_duplicates()
total_df["销售额"] = total_df["销售额"].fillna(0).astype(int)
total_df["客户名称"] = total_df["客户名称"].fillna("未知")

# 4. 统计每月销售情况
monthly_stats = total_df.groupby("月份").agg(
    总销售额=("销售额", "sum"),
    订单总数=("订单号", "nunique")
).reset_index()

# 5. 保存结果
total_df.to_csv("合并后销售数据_2024.csv", index=False)
monthly_stats.to_excel("每月销售统计_2024.xlsx", index=False, engine="openpyxl")

print("批量处理完成!已生成两个文件:合并后销售数据_2024.csv、每月销售统计_2024.xlsx")

作为新手,你只需要修改 glob.glob(“销售数据文件夹/*.csv”) 中的文件夹路径,即可直接运行此脚本,轻松应对数十甚至上百份数据文件的处理任务。

新手常见问题与避坑指南

  1. 文件路径错误:如果代码报错“FileNotFoundError”,请检查文件路径是否正确。可将数据文件放在与脚本相同的目录下,或使用绝对路径(例如 “C:/Users/YourName/Desktop/销售数据/*.csv”)。
  2. Excel引擎混淆:读取 .xlsx 文件时,engine 参数应指定为 “openpyxl”;读取旧的 .xls 文件时,则指定为 “xlrd”
  3. 数据格式不一致:在批量读取前,请确保所有源文件的列名、列顺序是一致的,否则合并时可能出现错位或错误。
  4. 中文乱码问题:读取CSV文件时若出现中文乱码,可以在 pd.read_csv() 中添加编码参数尝试解决,如 pd.read_csv(path, encoding=‘utf-8’)pd.read_csv(path, encoding=‘gbk’)

总结

使用Pandas进行批量文件处理的核心逻辑可以概括为:“批量读取 -> 合并 -> 统一处理 -> 批量保存”。整个过程无需人工干预任何一个单独文件,将重复性劳动转化为可复用的自动化脚本。

建议初学者先从“批量读取与合并”入手,成功运行后再逐步添加数据清洗、统计分析等功能模块。掌握这项技能后,下次再面对堆积如山的报表文件,你只需运行一遍脚本,几分钟内就能得到整洁、准确的结果,大幅提升工作效率。如果你对这类数据处理技巧感兴趣,欢迎到 云栈社区 探索更多实战教程和交流心得。




上一篇:Linux运维实践:使用logrotate管理Nginx与MySQL日志轮转与清理
下一篇:告别三套代码:用Rust框架Dioxus实现Web、桌面与移动端同构开发
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-26 17:28 , Processed in 0.260022 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表