将pandas dataframe列表写入同一excel中的单独工作表时输出错误

jv4diomz  于 2023-05-12  发布在  其他
关注(0)|答案(2)|浏览(144)

我有一个代码,我使用tabula-py从pdf中读取表格,然后将dataframes的结果列表写入一个单独的excel中,每个dataframe都在单独的工作表中。
以下是我的当前代码:

def read_pdf(pdf_file):
    
    output_filepath = "output.xlsx"
    dfs = tabula.read_pdf(pdf_file, pages='all')
    for i in range(len(dfs)):
        print(dfs[i].to_string())
        with ExcelWriter(output_filepath) as writer:
            dfs[i].to_excel(writer, sheet_name='sheet%s' % i)

使用print函数,我可以看到dataframes的值,但生成的excel是空的,只有一个工作表,没有输出。

watbbzwu

watbbzwu1#

您在循环中多次打开ExcelWriter对象,这可能会导致覆盖以前的数据。应将with语句移到循环之外,以便只打开ExcelWriter对象一次。Something like that:

def read_pdf(pdf_file):
    
    output_filepath = "output.xlsx"
    dfs = tabula.read_pdf(pdf_file, pages='all')
    writer = pd.ExcelWriter(output_filepath, engine='xlsxwriter')
    for i in range(len(dfs)):
        print(dfs[i].to_string())
        dfs[i].to_excel(writer, sheet_name='sheet%s' % i)
    writer.save()

我使用了engine= 'xlswriter',因为它的性能更好,而且它支持比默认引擎更高级的特性。最后,我在循环外添加了“writer保存”,以便在写入后保存Excel文件。如果你不需要它,你可以删除它。

yi0zb3m4

yi0zb3m42#

你需要反转 for-loop <=> context-manager

def read_pdf(pdf_file):
    
    output_filepath = "output.xlsx"
    dfs = tabula.read_pdf(pdf_file, pages="all")

    with ExcelWriter(output_filepath) as writer:
        for idx, df in enumerate(dfs, start=1)
            df.to_excel(writer, sheet_name=f"Sheet_{idx}")

相关问题