如何将数据帧附加到 for 循环中的不同 excel 工作表

how to append dataframes to different excel sheets in for loop

我有一个问题,一开始看起来很容易解决,但现在我很困惑,因为我仍然无法解决。

我有这段代码 returns for 循环中有几个不同的数据帧,我需要在不同的 excel 工作表上附加不同的 dfs。

说清楚:

注意:我不想在每次需要保存数据帧时都使用with open之类的东西,因为如果可以的话,它们有很多。

我已经做了:

使用 openpyexcel:

#with pd.ExcelWriter("test.xlsx", engine="openpyxl", mode="a") as writer_test:
    for i in range(3):
        with pd.ExcelWriter("test.xlsx", engine="openpyxl", mode="a") as writer_test:
            a.to_excel(writer_test, sheet_name="name")
            b.to_excel(writer_test, sheet_name="b")
            writer_test.save()

这两种方式都是 returns 一个 Excel 文件,其中包含工作表名称、b、名称 1、b1、名称 2、b2,数据分开。

不指定引擎:

#with pd.ExcelWriter("test.xlsx", mode="A") as writer_test:

对于我在范围内(3): pd.ExcelWriter("test.xlsx", mode="A") 作为 writer_test: a.to_excel(writer_test, sheet_name="姓名") b.to_excel(writer_test, sheet_name="b") writer_test.save()

这只是覆盖数据,returns 只是最后一次迭代。

再次尝试 openpyexcel

wb = load_workbook('test.xlsx', read_only=False)

for i in range(3):
    ws = ["mysheet1", "mysheet2"]
    for ws_name in ws:
        if ws_name in wb.get_sheet_names():
            ws_mysheet1 = wb["mysheet1"]
        else:
            ws_mysheet1 = wb.create_sheet() # insert at first position
            ws_mysheet1.title = ws_name
    ws_mysheet1 = wb["mysheet1"]
    ws_mysheet2 = wb["mysheet2"]
    ws_mysheet1.append(a)
    ws_mysheet2.append(b)

这不允许我保存数据帧并且returns一个错误

TypeError: Value must be a list, tuple, range or generator, or a dict. Supplied value is <class 'pandas.core.frame.DataFrame'>

我也试过这个:

for i in range(3):  
    #with open(writer_test, 'a') as f:
        #a.to_excel(writer_test, 'a')
        #b.to_excel(writer_test, 'b')
    if os.path.exists('test.xlsx'):
        append_write = 'a' # append if already exists
    else:
        append_write = 'w' # make a new file if not

    highscore = open('test.xlsx',append_write)
    highscore.write(a + '\n', 'a')
    highscore.write(a + '\n', 'b')
    highscore.close()

这会导致另一个错误:

TypeError: write() takes exactly one argument (2 given)

我尝试了其他一些方法,但它们也不起作用。非常感谢任何帮助。

import pandas as pd

df = pd.util.testing.makeDataFrame()
df = df.head()

file = 'output.xlsx'
sheet_name = 'test'

for i in range(3):
    if i == 0:
        df.to_excel(file, sheet_name=sheet_name, index=False)
    else:
        read_data = pd.read_excel(file,sheet_name=sheet_name)
        merge_data = pd.concat([df, read_data])
        merge_data.to_excel(file, sheet_name=sheet_name, index=False)