用 Python 批量处理 Excel:从重复值清洗到数据可视化

引言

日常工作中,经常需要处理多份 Excel 表格:比如合并销售数据、清洗重复的用户信息,最后生成可视化图表。手动操作不仅效率低,还容易出错。这篇文章分享一套 Python 自动化流程,用pandasmatplotlib搞定从数据清洗到可视化的全流程,附完整代码和避坑指南。

一、环境准备

需要安装的库:

bash 复制代码
pip install pandas openpyxl matplotlib  # openpyxl用于读取xlsx格式

避坑点:如果 Excel 是.xls格式,需额外安装xlrd==1.2.0(高版本不支持 xls)。

二、核心步骤(附代码)
1. 读取并合并多份 Excel 文件

假设文件夹data/下有 3 个销售数据文件(sale1.xlsxsale2.xlsxsale3.xlsx),结构相同(含 "日期""产品""销售额" 列)。

python 复制代码
import pandas as pd
import os

# 读取文件夹下所有Excel
file_dir = "data/"
all_data = []
for file in os.listdir(file_dir):
    if file.endswith(".xlsx"):
        df = pd.read_excel(os.path.join(file_dir, file))
        all_data.append(df)

# 合并为一个DataFrame
merged_df = pd.concat(all_data, ignore_index=True)
print(f"合并后共{len(merged_df)}行数据")
2. 清洗重复值

目标:删除 "产品 + 日期" 完全重复的行(避免重复统计)。

python 复制代码
# 查看重复值数量
print(f"重复值行数:{merged_df.duplicated(subset=['产品', '日期']).sum()}")

# 删除重复值(保留第一行)
cleaned_df = merged_df.drop_duplicates(subset=['产品', '日期'], keep='first')
3. 缺失值处理

如果 "销售额" 列有缺失,用该产品的平均值填充(比直接删除更合理):

python 复制代码
# 按"产品"分组,用组内平均值填充缺失值
cleaned_df['销售额'] = cleaned_df.groupby('产品')['销售额'].transform(
    lambda x: x.fillna(x.mean())
)
4. 数据可视化(生成销量趋势图)

以 "产品 A" 为例,绘制月度销售额折线图:

python 复制代码
import matplotlib.pyplot as plt

# 设置中文显示(避免乱码)
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]

# 筛选产品A的数据,按月份分组求和
product_a = cleaned_df[cleaned_df['产品'] == '产品A']
product_a['月份'] = product_a['日期'].dt.to_period('M')  # 提取月份
monthly_sales = product_a.groupby('月份')['销售额'].sum()

# 绘图
monthly_sales.plot(kind='line', figsize=(10, 6))
plt.title('产品A月度销售额趋势')
plt.xlabel('月份')
plt.ylabel('销售额(元)')
plt.grid(alpha=0.3)
plt.savefig('sales_trend.png', dpi=300)  # 保存图片
plt.show()
三、完整代码总结

将上述步骤整合为一个函数,方便复用:

python 复制代码
def process_excel(file_dir, target_product):
    # 1. 读取合并数据(代码同上)
    # 2. 清洗重复值(代码同上)
    # 3. 处理缺失值(代码同上)
    # 4. 可视化(代码同上)
    return cleaned_df  # 返回处理后的DataFrame

# 调用示例
df = process_excel("data/", "产品A")
四、扩展思考
  • 如果数据量超过 10 万行,建议用dask替代pandas,避免内存溢出;
  • 可视化也可以尝试seaborn,图表更美观(如sns.lineplot())。
  • 你在处理 Excel 时遇到过哪些棘手问题?欢迎留言分享你的解决方案~
相关推荐
databook11 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar12 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805112 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_12 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机19 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机20 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机20 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机20 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i20 小时前
drf初步梳理
python·django
每日AI新事件20 小时前
python的异步函数
python