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