Python 在分组/数据透视表 excel 行下迭代数据

问题描述 投票:0回答:1

我有一个包含数据透视表数据的 Excel 电子表格。这些行按其下的项目分组。我不是 excel 数据透视表方面的专家,所以不确定其格式,但我正在尝试通过 python 读取数据并将其转换为字典以供使用。我找不到读取分组行下数据的方法。我试图用 pandas.read_excel 和 openpyxl 迭代行,但我只能查看分组行的标题。这是 Excel 工作表的示例屏幕截图。

python excel pandas pivot-table openpyxl
1个回答
0
投票

由于 Title 和 Item 在同一列中,因此很难分开。
仅使用 Openpyxl 的解决方案使用缩进来分隔部分以创建字典的字典。
我没有包括标题的总计,例如

Title1: 2
但如果需要,可以将其作为另一个项目添加到字典中。

代码示例;

import openpyxl

pviotfile = 'pivTable.xlsx'
wb = openpyxl.load_workbook(pviotfile)
ws = wb.active

ptable_dict = {}
current_title = ''
for row in ws.iter_rows(min_row=5, max_col=1):
    for cell in row:
        ### Indent of float(0.0) is Title
        if cell.alignment.indent == float(0.0):
            current_title = cell.value
        ### Indent of float(1.0) is Item
        elif cell.alignment.indent == float(1.0):
            if current_title in ptable_dict:
                ptable_dict[current_title] += [{cell.value:cell.offset(column=1).value}]
            else:
                ptable_dict[current_title] = [{cell.value:cell.offset(column=1).value}]

### Display dictionary data
for k, v in ptable_dict.items():
    print(f"{k}")
    for item in v:
        for x, y in item.items():
            print(f"{x} {y}")
    print("-------------------")

字典是这样的;

{
'Title1': [{'Item1': 1}, {'Item2': 1}], 
'Title2': [{'Item1': 1}, {'Item2': 1}, {'Item3': 1}, {'Item4': 1}, {'Item5': 1}, {'Item6': 1}, {'Item7': 1}, {'Item8': 1}], 
'Title3': [{'Item1': 1}, {'Item2': 1}, {'Item3': 1}, {'Item4': 1}, {'Item5': 1}, {'Item6': 1}, {'Item7': 1}, {'Item8': 1}],
'Title4': [{'Item1': 1}, {'Item2': 1}] 
}

示例展示

Title1
Item1 1
Item2 1
-------------------
Title2
Item1 1
Item2 1
Item3 1
Item4 1
Item5 1
Item6 1
Item7 1
Item8 1
-------------------
Title3
Item1 1
Item2 1
...
© www.soinside.com 2019 - 2024. All rights reserved.