【Python】多个dataframe存入excel的不同的sheet表里,而不会被覆盖的方法

news/2024/9/29 4:02:46/

我发现,我原来用的多个工作簿存入的方法,发现不太可行,如果我用原来的方法,然后for循环,新的dataframe会把原来的覆盖掉,然后只剩下一个工作薄。原先的代码:

python">with pd.ExcelWriter(file_name ) as writer:Table.to_excel(writer, sheet_name=sheet_name, index=False) 

当使用for循环的时候,原来的sheet 会被新的表给覆盖掉。先用一堆的dfs来测试一下:

python">import pandas as pddf1 = pd.DataFrame({'Column1': range(5), 'Column2': range(5, 10)})
df2 = pd.DataFrame({'Column1': range(10, 15), 'Column2': range(10, 15)})
df3 = pd.DataFrame({'Column1': range(20, 25), 'Column2': range(20, 25)})dataframes = []
dataframes.append(df1)
dataframes.append(df2)
dataframes.append(df3)

这里运行完了以后,我们现在有多个dataframe的表,现在需要一个个将他们存入到excel的不同的工作簿中。如果是给上面的方法加一个for循环,【错误示范】!!!!:

python">file_name="./tese.xlsx"
for i in range(len(dataframes)):Table=dataframes[i]sheet_name ="sheet_"+str(i)with pd.ExcelWriter(file_name ) as writer:Table.to_excel(writer, sheet_name=sheet_name, index=False) 

结果报出来的结果是只有最后一个工作簿!!!多个dataframe也没法全部存进去。
在这里插入图片描述

with pd.ExcelWriter(file_name ) as writer 这段代码表示,pandas创建一个 ExcelWriter 对象,它负责管理写入Excel文件的过程,在我上面的例子中,使用 它来写入数据到file_name 文件里,并将 df DataFrame中的数据写入到这个文件下的,名为sheet_name 的工作表中。

也就是说,我在遍历所有的df,然后反复打开excel,反复存进去。每次修改都是覆盖原来的内容,所以最后,Excel只剩下最新一个df的数据。

逻辑应该是这样的:

  1. 读取excel表 ,把with pd.ExcelWriter(file_name ) as writer写在最外层
  2. 获取多个dataframe遍历(for循环dataframes)!!!
  3. 注意存入的时候,要起好sheet_name。不同的df如果要存入不同的工作簿,就要起不同的sheet_name ,不然还是会覆盖

【正确的改法】:

python">
file_name="./tese.xlsx"
with pd.ExcelWriter( file_name ) as writer:   #读取excel表,写在最外层for i in range(len(dataframes)):  #for循环获取多个dataframe遍历sheet_name ="sheet_"+str(i) #起不同的表名Table=dataframes[i]Table.to_excel(writer, sheet_name=sheet_name, index=False) 

结果:

在这里插入图片描述

或者使用 openpyxl 库的方法。

这需要为每个工作簿创建一个 Worksheet 对象,并将它们保存到同一个工作簿(Workbook)中。
这个方法我没怎么用,如果是比较少工作簿的情况下,确实可以使用,不过我用上面的方法更多一点。

python">from openpyxl import Workbook# 创建一个新的工作簿
wb = Workbook()# 添加多个工作表
ws1 = wb.active
ws1.title = "Sheet 1"
ws1.append(["Column 1", "Column 2", "Column 3"])  # 添加标题行
ws1.append([1, 2, 3])  # 添加数据行ws2 = wb.create_sheet("Sheet 2")
ws2.append(["Column A", "Column B"])
ws2.append([4, 5])# 可以继续添加更多的工作表...# 保存工作簿
wb.save("multiple_sheets.xlsx")

结果:
在这里插入图片描述在这里插入图片描述

这个方法也可以实现效果,两个表都顺利存入了。


http://www.ppmy.cn/news/1531760.html

相关文章

备考中考的制胜法宝 —— 全国历年中考真题试卷大全

在中考这场重要的战役中,每一分都至关重要。为了帮助广大考生更好地备考,我们精心整理了这份全国历年中考真题试卷大全,旨在为大家提供最全面、最权威的备考资料。 文章目录 1. 全科覆盖,无遗漏2. 历年真题,权威可靠3.…

feign的全局拦截器和局部拦截器

拦截器和过滤器在java中用的最多的应该是处理一些head头,进行鉴权,签名等处理。feign也不例外。 一、feign全局拦截器 全局拦截器对每个feign客户端都生效 配置这里省略。 全局拦截器定义 package com.vvvtimes.interceptor;import feign.RequestIn…

Android常用C++特性之std::optional

声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。 std::optional 是 C17 引入的一个模板类,用于表示可能缺失的值。它提供了一种安全的方法来处理可选值,允许变量在某些情况下没有值&#xff08…

git-repo系列教程(3) git-repo https证书认证问题

文章目录 问题描述解决步骤1.下载证书2.测试证书是否正常3.设置环境变量 总结 问题描述 在使用git repo 同步仓库时,发现不能同步,出现如下提示错误: % Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left …

leetcode刷题day27|贪心算法Part01(455.分发饼干、376. 摆动序列、53. 最大子序和)

前言: 贪心的本质选择每一阶段的局部最优,从而达到全局最优。 455.分发饼干 思路:局部最优-大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个;全局最优:喂饱尽可能多的小孩。可以尝试使用贪心策略&#xff0…

数据结构——二叉树的性质和存储结构

二叉树的抽象类型定义 基本操作: CreateBiTree(&T,definition) 初始条件:definition给出二叉树T的定义。 操作结果:按definition构造二叉树T。 PreOrderTraverse(T) 初始条件:二叉树T存在。 操作结果:先序遍历T,对每个结…

ECharts图表图例3

java 用ecplise软件 可视化图表 代码&#xff1a; <! DOCTYPE html > < html > < head > < meta charset " UTF -8"> <1--引入 ECharts 脚本--> < script src " js / echarts . js "></ script > <…

echarts 导出pdf空白原因

问题阐述 页面样式&#xff1a; 导出pdf: 导出pdf&#xff0c;统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制&#xff0c;而echarts用canvas绘制&#xff0c;canvas内部内容不会进行复制&#xff0c;只会复制canvas节点&#xff0c;因此导出pdf空白。 解决…