2

我正在使用 python-docx 从文档中提取两个表。我已经遍历了这些表并创建了一个列表列表。每个单独的列表代表一个表,其中我每行都有字典。每个字典都包含一个键/值对。键是表中的列标题,值是该列中该行数据的单元格内容。在为每个表创建数据框并将每个表写入单独的 Excel 工作表时,我遇到了困难。

from docx.api import Document
import pandas as pd
import csv
import json
import unicodedata

document = Document('Sampletable1.docx')
tables = document.tables
print (len(tables))
big_data = []


for table in document.tables:
    data = []
    Keys = None
    for i, row in enumerate(table.rows):
        text = (cell.text for cell in row.cells)
        if i == 0:
            keys = tuple(text)
            continue
        dic = dict(zip(keys, text))
        data.append(dic)
    big_data.append(data)
 print(big_data)

上述代码的输出是:

2

[[{'资产':'增长投资','目标投资组合':'66.50%','实际投资组合':'66.30%','差异':'-0.20%'},{'资产': '防御性投资', '目标投资组合': '33.50%', '实际投资组合': '33.70%', '方差': '0.20%'}], [{'Owner': 'REST Super', '产品':'退休金','类型':'现有','状态':'现有','客户 2':'客户 1'},{'所有者':'TWUSUPER TransPension','产品':'TTR Pension', 'Type': 'New', 'Status': 'New', 'Customer 2': 'Customer 1'}, {'Owner': 'TWUSUPER', 'Product': '退休金','类型':'现有','状态':'现有'}]]

如何访问上述列表?

此外,我尝试创建一个熊猫数据框

#write the data into a data frame
for thing in big_data:
    #print(thing)
    df = pd.DataFrame(thing)
    print(df)
    writer = pd.ExcelWriter('dftable3.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1')
    writer.save()

我在 excel 上得到了第一个表,但无法使用第二个表。 我希望这两个表都在同一个 excel 工作簿(dftable3.xlsx)中,但在不同的工作表中(Sheet1,Sheet2)

我附上了桌子的图片。

提前致谢

在此处输入图像描述在此处输入图像描述

4

1 回答 1

3

如何访问上述列表?

你已经做到了,通过迭代它们,或者打印它们。考虑使用漂亮打印库:

import pprint
pprint.pprint(big_data)

我期待......不同的工作表(Sheet1,Sheet2)

好吧,鉴于您提供的常量“Sheet1”参数,这不太可能。这是实现这一目标的一种方法:

writer = pd.ExcelWriter('dftable3.xlsx', engine='xlsxwriter')
for i, thing in enumerate(big_data):
    df = pd.DataFrame(thing)
    df.to_excel(writer, sheet_name=f'Sheet{i}')
writer.save()

请注意writer-- 它的范围必须比每个组成部分dfs 的寿命更长。

于 2019-01-03T03:07:04.870 回答