Python pandas批量处理Excel数据透视表

 更新时间:2026年07月29日 08:51:31   作者:张老师技术栈  
数据透视表是 Excel 最常用的分析工具,本文会使用pandas的pivot_table函数,一行代码生成透视表并且支持多级透视和多个统计值,让你的数据分析效率翻倍

数据透视表是 Excel 最常用的分析工具。pandas 的 pivot_table 一行代码生成。

一、读取与透视

import pandas as pd

df = pd.read_excel("销售数据.xlsx")

pivot = pd.pivot_table(
    df,
    values="销售额",
    index="城市",
    columns="品类",
    aggfunc="sum",
    fill_value=0,
    margins=True,
    margins_name="合计"
)

二、多级透视

pivot = pd.pivot_table(
    df,
    values="销售额",
    index=["城市", "销售员"],
    columns="季度",
    aggfunc=["sum", "mean"]
)

三、多个统计值

pivot = pd.pivot_table(
    df,
    values="销售额",
    index="城市",
    aggfunc={"销售额": ["sum", "mean", "count", "max"]}
)

四、知识扩展

使用Pandas处理Excel数据透视表,核心思路是用 pivot_table 函数将手工拖拽的“规则”转化为可复用的代码。

准备工作:安装与导入

在开始前,请确保已安装Pandas和Excel读写引擎。

pip install pandas openpyxl

在Python脚本中导入库:

import pandas as pd
import glob
import os

核心:pandas的 pivot_table 函数

Pandas的 pivot_table 函数是生成数据透视表的核心。它与Excel透视表的对应关系如下:

Excel 透视表区域pandas pivot_table 参数说明
index作为行标签的列,可以是单列或多列。
columns作为列标签的列。
values需要进行聚合计算的数值列。
计算方式aggfunc聚合函数,如 'sum'(求和), 'mean'(平均), 'count'(计数)。
总计marginsTrue 或 False,是否显示总计行/列。
总计名称margins_name自定义总计行/列的标签,默认为 'All'
空值填充fill_value将透视表中的空值替换为指定值。

实战场景:批量处理

场景一:合并多个Excel文件后生成透视表

当数据分散在多个结构相同的Excel文件中时,可以先将它们合并,再生成透视表。

import pandas as pd
import glob
# 1. 获取所有Excel文件路径
file_paths = glob.glob('销售数据_*.xlsx')  # 假设所有文件都以"销售数据_"开头
# 2. 读取并合并所有文件
all_data = pd.DataFrame()
for file in file_paths:
    df = pd.read_excel(file)
    all_data = pd.concat([all_data, df], ignore_index=True)
# (可选) 如果文件名包含月份信息,可以提取出来作为新列
# all_data['月份'] = all_data['文件名'].apply(lambda x: x.split('_')[1])
# 3. 生成数据透视表
pivot_table = pd.pivot_table(all_data,
                             values='销售额',
                             index='地区',
                             columns='产品',
                             aggfunc='sum',
                             margins=True,
                             margins_name='总计',
                             fill_value=0)
# 4. 导出结果
pivot_table.to_excel('汇总透视表.xlsx')
print("透视表已生成!")

场景二:处理一个Excel文件中的多个Sheet

如果一个Excel文件包含多个结构相同Sheet,每个Sheet代表不同维度,可将所有Sheet合并后再处理。

import pandas as pd
# 1. 读取所有Sheet,sheet_name=None会返回一个字典
all_sheets = pd.read_excel('全年销售数据.xlsx', sheet_name=None)
# 2. 合并所有Sheet,并添加来源Sheet名作为新列
all_data = pd.DataFrame()
for sheet_name, df in all_sheets.items():
    df['月份'] = sheet_name  # 新增一列标记数据来源
    all_data = pd.concat([all_data, df], ignore_index=True)
# 3. 生成透视表(按月份和地区汇总)
pivot_table = pd.pivot_table(all_data,
                             values='销售额',
                             index=['月份', '地区'],
                             columns='产品',
                             aggfunc='sum',
                             fill_value=0,
                             margins=True,
                             margins_name='总计')
# 4. 导出结果
pivot_table.to_excel('月度销售透视表.xlsx')

场景三:批量生成多个透视表并导出到一个Excel

如果需要生成多个不同维度的透视表,可将它们写入同一个Excel文件的不同Sheet中,方便对比。

import pandas as pd
df = pd.read_excel('源数据.xlsx')
with pd.ExcelWriter('多维度透视报告.xlsx', engine='openpyxl') as writer:
    # 1. 按地区汇总
    pivot1 = pd.pivot_table(df, values='销售额', index='地区',
                            aggfunc='sum', margins=True, margins_name='合计')
    pivot1.to_excel(writer, sheet_name='地区汇总')
    # 2. 按产品汇总
    pivot2 = pd.pivot_table(df, values='销售额', index='产品',
                            aggfunc='sum', margins=True, margins_name='合计')
    pivot2.to_excel(writer, sheet_name='产品汇总')
    # 3. 地区 × 产品 交叉透视
    pivot3 = pd.pivot_table(df, values='销售额', index='地区', columns='产品',
                            aggfunc='sum', fill_value=0, margins=True, margins_name='合计')
    pivot3.to_excel(writer, sheet_name='地区_产品交叉')

场景四:结合xlwings在原有Excel中生成透视表(需安装Excel)

如果需要像Excel原生透视表一样操作,可使用 xlwings 库。它需要本地安装Excel。

import pandas as pd
import xlwings as xw
def batch_pivot_in_workbook(input_xlsx, index_col, value_col, columns_col=None, aggfunc='sum'):
    """遍历Excel中的所有工作表,生成透视表并写入新sheet"""
    app = xw.App(visible=False)
    wb = app.books.open(input_xlsx)
    summary_sheet = wb.sheets.add('透视汇总')
    row_offset = 0
    for sheet in wb.sheets:
        if sheet.name == '透视汇总':
            continue
        # 读取数据
        data_range = sheet.range('A1').expand('table')
        df = data_range.options(pd.DataFrame, header=1).value
        # 清洗数值列(去除货币符号等)[reference:16]
        df[value_col] = df[value_col].astype(str).str.replace(r'[¥¥$,]', '', regex=True)
        df[value_col] = pd.to_numeric(df[value_col], errors='coerce').fillna(0)
        # 生成透视表[reference:17]
        pivot = pd.pivot_table(df,
                               index=index_col,
                               columns=columns_col if columns_col else None,
                               values=value_col,
                               aggfunc=aggfunc,
                               fill_value=0,
                               margins=True,
                               margins_name='总计')
        # 将透视表写入汇总sheet[reference:18]
        summary_sheet.range(row_offset + 1, 1).value = f'--- {sheet.name} 的透视结果 ---'
        summary_sheet.range(row_offset + 2, 1).value = pivot
        row_offset += len(pivot) + 4  # 为下一个透视表留出空行
    wb.save()
    wb.close()
    app.quit()
    print(f"批量透视完成,结果已写入 '透视汇总' sheet。")
# 调用函数
batch_pivot_in_workbook('数据文件.xlsx', index_col='地区', value_col='销售额', columns_col='产品')

总结

pivot_table 是核心indexcolumnsvaluesaggfunc这四个参数与Excel透视表的行、列、值和计算方式一一对应。

批量处理三步走:批量处理通常遵循“读取 → 合并 → 透视”的模式。

选择合适的工具

  • 仅需计算结果,用 pandas + to_excel 即可。
  • 需要在Excel中保留原生透视表功能,可使用 xlwings

到此这篇关于Python pandas批量处理Excel数据透视表的文章就介绍到这了,更多相关Python处理Excel数据透视表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PyQt5中多线程模块QThread使用方法的实现

    PyQt5中多线程模块QThread使用方法的实现

    这篇文章主要介绍了PyQt5中多线程模块QThread使用方法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • OpenCV进阶之鼠标事件的回调函数使用方法详解

    OpenCV进阶之鼠标事件的回调函数使用方法详解

    鼠标事件的回调函数使用方法是计算机视觉领域的核心知识点之一,掌握这项技能对于提升视觉算法开发效率和应用效果至关重要,本文深入讲解了OpenCV中鼠标事件回调函数的使用方法,感兴趣的小伙伴可以了解下
    2026-05-05
  • Python爬取当网书籍数据并数据可视化展示

    Python爬取当网书籍数据并数据可视化展示

    这篇文章主要介绍了Python爬取当网书籍数据并数据可视化展示,下面文章围绕Python爬虫的相关资料展开对爬取当网书籍数据的详细介绍,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-01-01
  • Python百度指数获取脚本下载并保存

    Python百度指数获取脚本下载并保存

    这篇文章主要介绍了Python百度指数获取脚本下载并保存,基于原有的可以对百度指数进行爬虫的脚本做一个可直接返回pd.DataFrame的数据框的类加上可视化代码完成,需要的朋友可以参考一下
    2022-06-06
  • python类别数据数字化LabelEncoder VS OneHotEncoder区别

    python类别数据数字化LabelEncoder VS OneHotEncoder区别

    这篇文章主要为大家介绍了机器学习:数据预处理之将类别数据数字化的方法LabelEncoder VS OneHotEncoder区别详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • python UDF 实现对csv批量md5加密操作

    python UDF 实现对csv批量md5加密操作

    这篇文章主要介绍了python UDF 实现对csv批量md5加密操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • django 通过URL访问上传的文件方法

    django 通过URL访问上传的文件方法

    今天小编就为大家分享一篇django 通过URL访问上传的文件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python+Pygame实战之24点游戏的实现

    Python+Pygame实战之24点游戏的实现

    这篇文章主要为大家详细介绍了如何利用Python和Pygame实现24点小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Python实现音频添加数字水印的示例详解

    Python实现音频添加数字水印的示例详解

    数字水印技术可以将隐藏信息嵌入到音频文件中而不明显影响音频质量,下面小编将介绍几种在Python中实现音频数字水印的方法,希望对大家有所帮助
    2025-04-04
  • 使用 OpenCV 开发虚拟键盘的方法

    使用 OpenCV 开发虚拟键盘的方法

    OpenCV是一个强大的图像处理工具,用于机器学习、图像处理等的跨平台开源库,用于开发实时计算机视觉应用程序,本文重点给大家介绍使用 OpenCV 开发虚拟键盘的方法,感兴趣的朋友一起看看吧
    2021-11-11

最新评论