将多个python pandas数据框放到一个excel工作表中

arknldoa  于 2023-04-22  发布在  Python
关注(0)|答案(6)|浏览(132)

只要是不同的工作表,在excel工作簿中添加许多pandas数据框是很容易的。但是,如果你想使用pandas内置的www.example.com _excel功能,在一个工作表中添加许多数据框就有点棘手df.to了。

# Creating Excel Writer Object from Pandas  
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')   
workbook=writer.book
worksheet=workbook.add_worksheet('Validation') 
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)   
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)

上面的代码将不起作用。您将得到以下错误

Sheetname 'Validation', with case ignored, is already in use.

现在,我已经做了足够的实验,我找到了一种方法来使它工作。

writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')   # Creating Excel Writer Object from Pandas  
workbook=writer.book
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)   
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)

这将工作.所以,我的目的张贴在stackoverflow这个问题是双重的.首先,我希望这将有助于有人如果他/她试图把许多dataframes到一个单一的工作表在excel.
其次,有人能帮助我理解这两个代码块之间的区别吗?在我看来,它们几乎是相同的,除了第一个代码块创建工作表称为“验证”提前,而第二个没有.我得到了这一部分.
我不明白的是为什么会有什么不同呢?即使我没有提前创建工作表,这一行,最后一行的前一行,

df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)

将创建一个工作表。因此,当我们到达最后一行代码时,工作表“验证”已经在第二个代码块中创建。所以,我的问题基本上是,为什么第二个代码块可以工作,而第一个不能?
如果还有其他方法可以使用内置的www.example.com _excel功能将许多数据框放入excel中,请与我们分享df.to!!

8ehkhllq

8ehkhllq1#

要提前创建工作表,需要将创建的工作表添加到sheets字典中:

writer.sheets['Validation'] = worksheet
使用您的原始代码:

# Creating Excel Writer Object from Pandas  
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')   
workbook=writer.book
worksheet=workbook.add_worksheet('Validation')
writer.sheets['Validation'] = worksheet
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)   
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)

说明

如果我们看一下pandas函数to_excel,它使用了作者的write_cells函数:

excel_writer.write_cells(formatted_cells, sheet_name, startrow=startrow, startcol=startcol)

所以看看xlsxwriterwrite_cells函数:

def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0):
    # Write the frame cells using xlsxwriter.
    sheet_name = self._get_sheet_name(sheet_name)
    if sheet_name in self.sheets:
        wks = self.sheets[sheet_name]
    else:
        wks = self.book.add_worksheet(sheet_name)
        self.sheets[sheet_name] = wks

在这里我们可以看到,它在self.sheets中检查sheet_name,因此也需要将其添加到self.sheets中。

m4pnthwp

m4pnthwp2#

用户3817518:“请分享是否有其他方法可以使用内置的www.example.com _excel功能将许多数据框放入exceldf.to!!”
以下是我的尝试:
简单的方法把很多 Dataframe 放在一个工作表或多个标签。让我知道如果这工作!
--要进行测试,只需运行示例 Dataframe 以及第二和第三部分代码。

Dataframe 示例

import pandas as pd
import numpy as np

# Sample dataframes    
randn = np.random.randn
df = pd.DataFrame(randn(15, 20))
df1 = pd.DataFrame(randn(10, 5))
df2 = pd.DataFrame(randn(5, 10))

将多个数据框放入一个xlsx表中

# funtion
def multiple_dfs(df_list, sheets, file_name, spaces):
    writer = pd.ExcelWriter(file_name,engine='xlsxwriter')   
    row = 0
    for dataframe in df_list:
        dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)   
        row = row + len(dataframe.index) + spaces + 1
    writer.save()

# list of dataframes
dfs = [df,df1,df2]

# run function
multiple_dfs(dfs, 'Validation', 'test1.xlsx', 1)

将多个数据框放在不同的标签/表单中

# function
def dfs_tabs(df_list, sheet_list, file_name):
    writer = pd.ExcelWriter(file_name,engine='xlsxwriter')   
    for dataframe, sheet in zip(df_list, sheet_list):
        dataframe.to_excel(writer, sheet_name=sheet, startrow=0 , startcol=0)   
    writer.save()

# list of dataframes and sheet names
dfs = [df, df1, df2]
sheets = ['df','df1','df2']    

# run function
dfs_tabs(dfs, sheets, 'multi-test.xlsx')
mum43rcc

mum43rcc3#

阿德里安的回答可以简化如下
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter') df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0) another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)
适用于pandas 0.25.3和python 3.7.6

fnvucqvd

fnvucqvd4#

使用with-您不必显式调用writer.save()writer.close()
此外,如果您使用workbook=writer.book,它会自动管理workbook.close()
(其他答案忘了这样做,而这种情况相当经常发生,因为我们是人;)

import pandas as pd 

df = pd.DataFrame(data={'col1':[9,3,4,5,1,1,1,1], 'col2':[6,7,8,9,5,5,5,5]}) 
df2 = pd.DataFrame(data={'col1':[25,35,45,55,65,75], 'col2':[61,71,81,91,21,31]}) 

with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='testSheetJ', startrow=1, startcol=0)
    df2.to_excel(writer, sheet_name='testSheetJ', startrow=1+len(df)+3, startcol=0)

结果:

44u64gxh

44u64gxh5#

我更倾向于先连接 Dataframe ,然后将 Dataframe 转换为Excel格式。要将两个 Dataframe 并排放在一起(而不是一个在另一个上面),请执行以下操作:

writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')   # Creating Excel Writer Object from Pandas  
workbook=writer.book
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)   
new_df = pd.concat([df, another_df], axis=1)
new_df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
5hcedyr0

5hcedyr06#

将多个数据框写入一张excel表

# Position the dataframes in the worksheet.
df1.to_excel(writer, sheet_name='Sheet1')  # Default position, cell A1.
df2.to_excel(writer, sheet_name='Sheet1', startcol=3)
df3.to_excel(writer, sheet_name='Sheet1', startrow=6)

# Write the dataframe without the header and index.
df4.to_excel(writer, sheet_name='Sheet1',startrow=7, startcol=4, header=False, index=False)

相关问题