You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从Excel数据透视表中提取列数据?

问题描述

我尝试用Python Pandas提取Excel工作表中数据透视表的全部数据,想获取透视表的所有列。使用DataFrame.get("列名")会抛出Key Error,但用"Unnamed: 1"这类名称却能取到数据。我需要把提取的数据保存成普通表格格式的电子表格,方便制作图表等操作。

示例代码:

df = pd.read_excel(filename.xlsx)
print(df.columns)

输出:

Index(['2023', 'Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4',
'Unnamed: 5', 'Unnamed: 6', 'Unnamed: 7', 'Unnamed: 8', 'Unnamed: 9',
'Unnamed: 10', 'Unnamed: 11', 'Unnamed: 12', 'Unnamed: 13',
'Unnamed: 14', 'Unnamed: 15', 'Unnamed: 16', 'Unnamed: 17',
'Unnamed: 18', 'Unnamed: 19'],
dtype='object')

问题原因是带筛选器的数据透视表,read_excel默认将第一行识别为列名,但该行并非透视表的实际列名。


解决方案

方法1:指定表头所在行

先打开Excel确认透视表实际表头的行号(比如实际表头在第2行,对应pandas的索引为1),用header参数指定表头行:

import pandas as pd

# 假设实际表头位于Excel第2行,设置header=1(pandas索引从0开始)
df = pd.read_excel("filename.xlsx", header=1)
print(df.columns)

执行后即可正确读取透视表的实际列名,后续可直接通过列名调取数据。

方法2:手动重命名列

若透视表表头存在合并单元格或特殊格式,可先读取数据再手动设置列名:

import pandas as pd

# 跳过错误的第一行列名
df = pd.read_excel("filename.xlsx", skiprows=1)
# 替换为透视表的真实列名
df.columns = ["年份", "产品A", "产品B", "产品C", ...]

方法3:处理多级复合表头

如果透视表是多级复合表头(行列均有分组),可指定多行作为表头,再合并为单级列名:

import pandas as pd

# 假设表头占用Excel第1、2行,对应pandas索引0和1
df = pd.read_excel("filename.xlsx", header=[0, 1])
# 合并多级表头为单级列名
df.columns = ['_'.join(col).strip() for col in df.columns.values]

保存整理后的数据

处理完列名后,直接保存为普通表格:

df.to_excel("整理后的数据.xlsx", index=False)

内容的提问来源于stack exchange,提问作者Srinivasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:55:07