Pandas中如何引用不同合并单元格下的同名列指定数据?
Pandas多级合并表头列引用方法
带合并单元格的Excel读入Pandas后,会自动生成MultiIndex多级列索引,直接用单级列名df['Worker']索引报错,是因为重名列属于不同的上层分组,单值无法匹配完整的多级索引路径,按以下方法操作即可准确定位目标列:
1. 先校验列索引结构
先执行代码确认当前列的层级结构:
print(df.columns)
正常读取到合并表头时,输出会是如下元组形式的多级索引:
MultiIndex([('A公司', 'Worker'), ('A公司', 'Salary'), ('B公司', 'Worker'), ('B公司', 'Salary'), ('C公司', 'Worker'), ('C公司', 'Salary')], )
如果输出是普通单级索引,说明读文件时没识别到多行表头,重新读入时指定表头行数即可,比如表头占前2行(第一行为公司分组、第二行为具体字段名)时,读入代码写为:
import pandas as pd df = pd.read_excel("你的文件路径.xlsx", header=[0, 1])
2. 目标列引用方法
两种常用写法都可以准确拿到C公司分组下的Worker列数据:
- 方法一:传入元组匹配完整索引路径,兼容性最好,不会出现匹配错误
c_worker_data = df[('C公司', 'Worker')]
- 方法二:用
xs交叉索引方法,适合需要批量取同名列的场景
# level=1代表取内层字段层级,axis=1指定按列方向查找 c_worker_data = df.xs('Worker', level=1, axis=1)['C公司']
注意:不要尝试直接用单级列名索引重名列,重名场景下Pandas无法判断你需要的分组归属,会直接报错或返回错误结果。
内容的提问来源于stack exchange,提问作者Yohanes Yordan
相关产品推荐
相关产品推荐

