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

2025-03-13 09:00:00
admin
原创
69
摘要:问题描述:只要是不同的工作表,就可以很容易地将许多 pandas 数据框添加到 excel 工作簿中。但是,如果你想使用 pandas 内置的 df.to_excel 功能,将许多数据框放入一个工作表中会有些棘手。# Creating Excel Writer Object from Pandas wri...

问题描述:

只要是不同的工作表,就可以很容易地将许多 pandas 数据框添加到 excel 工作簿中。但是,如果你想使用 pandas 内置的 df.to_excel 功能,将许多数据框放入一个工作表中会有些棘手。

# 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 上发布这个问题的目的是双重的。首先,如果有人想将许多数据框放入 excel 的单个工作表中,我希望这会有所帮助。

其次,有人能帮我理解一下这两段代码之间的区别吗?在我看来,它们几乎相同,只是第一段代码提前创建了名为“验证”的工作表,而第二段没有。我明白那部分了。

我不明白的是为什么会有所不同?即使我没有提前创建工作表,这一行,也就是最后一行之前的那行,

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

无论如何都会创建一个工作表。因此,当我们到达最后一行代码时,工作表“Validation”也已经在第二个代码块中创建了。所以,我的问题基本上是,为什么第二个代码块可以工作而第一个却不行?

如果有其他方法可以使用内置的 df.to_excel 功能将许多数据框放入 excel,也请分享!!


解决方案 1:

要提前创建工作表,您需要将创建的工作表添加到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,它使用了 writerwrite_cells函数:

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

因此,查看 的write_cells功能xlsxwriter

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

在这里我们可以看到它检查sheet_nameself.sheets,所以也需要将其添加到那里。

解决方案 2:

user3817518:“如果有其他方法可以使用内置的 df.to_excel 功能将许多数据框放入 excel,也请分享!”

这是我的尝试:

只需一张表或多个选项卡即可轻松整合大量数据框。如果可行,请告诉我!

-- 为了测试,只需运行示例数据框和第二部分和第三部分代码。

示例数据框

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')

解决方案 3:

使用with-您不必明确地调用writer.save()writer.close()使用。

此外,workbook.close()如果您使用,它会自动管理workbook=writer.book

(其他答案忘记这样做了,这种情况经常发生,因为我们是人类;)

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) 

结果:

在此处输入图片描述


如果您想在不同的表中写入数据框,只需执行以下操作:

with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='Sheet1')
    df2.to_excel(writer, sheet_name='Sheet2') 

解决方案 4:

Adrian 的回答可以简化如下

`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)`

适用于0.25.3带有 Python 的Pandas3.7.6

解决方案 5:

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

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)   

解决方案 6:

将多个数据框写入单个 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)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4053  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2777  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   95  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   111  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   97  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用