Pandas DataFrame 写入 Excel 的三种场景及方法

一、引言

本文主要介绍如何将 pandas 的 DataFrame 数据写入 Excel 文件中,涉及三个不同的应用场景:

  • 单个工作表写入:将单个 DataFrame 写入 Excel 表中;
  • 多个工作表写入:将多个 DataFrame 写入到同一个 Excel 表中的不同工作表中;
  • 追加模式写入:针对已有 Excel 文件,在不覆盖原有数据的前提下,将新的 DataFrame 数据追加至指定的工作表中。

二、准备工作

安装必要的库:pandas 和 openpyxl

pip install pandas
pip install openpyxl

准备测试数据

import pandas as pddata1 = {'姓名': ['张三', '李四', '王五'],'年龄': [25, 30, 35],'城市': ['北京', '上海', '深圳']
}data2 = {'课程': ['语文', '数学', '英语'],'分数': [90, 80, 70]
}df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)print(df1)
print(df2)

三、将 DataFrame 数据写入 Excel 表

3.1 场景一:将单个 DataFrame 写入 Excel 单个工作表

这是最常用的方法,直接调用to_excel()方法写入即可。
假设我写入到 D 盘下的 write_to_excel.xlsx 文件中,即“D:\write_to_excel.xlsx”,参考代码如下:

filepath = r'D:\write_to_excel.xlsx'
df1.to_excel(filepath, index=False)

注:

  • 在Python中,字符串前面的r表示原始字符串(raw string)。在原始字符串中,反斜杠\不会被当作转义字符。'D:\\write_to_excel.xlsx'r'D:\write_to_excel.xlsx' 是等价的。
  • index = False是不写入 DataFrame 的索引列,默认是写入的,此处设置为不写入。

3.2 场景二:将多个 DataFrame 写入 Excel 多个工作表

在 3.1 中,直接使用to_excel()方法写入时一次性的操作,如果多次调用,后面写入的数据会覆盖前面的数据。比如以下代码,执行完,write_to_excel.xlsx 文件中只有 df2 的数据。

filepath = r'D:\write_to_excel.xlsx'
df1.to_excel(filepath, index=False)
df2.to_excel(filepath, index=False)

image.png

如果要将两个 DataFrame 写入同一个 Excel 表,则需要构建一个对象。
我们可以使用pd.ExcelWriter()来构建对象,示例代码如下:

filepath = r'D:\write_to_excel.xlsx'
with pd.ExcelWriter(filepath) as writer:  df1.to_excel(writer, index=False)df2.to_excel(writer, index=False)

此时,如果打开 Excel 文件,我们会发现,还是原来的结果,说好的多个写入呢???
这是一个小坑,当写入多个工作表的时候,需要加上sheet_name参数指定工作表的名称。默认是 Sheet1,所以两次都是写入到 Sheet1 工作表中,导致数据不符合预期。
通过 sheet_name指定工作表名称,参考代码如下:

filepath = r'D:\write_to_excel.xlsx'
with pd.ExcelWriter(filepath) as writer:  df1.to_excel(writer, index=False, sheet_name='测试-用户信息')df2.to_excel(writer, index=False, sheet_name='测试-课程信息')

可以看到,此时的数据便符合我们的预期了,将 df1 写入工作表“测试-用户信息”,将 df2 写入工作表“测试-课程信息”。
image.png

3.3 场景三:追加数据到原有Excel文件的工作表中

前面介绍的场景都是覆盖式的写入,但是如果我是处理了 Excel 表的数据之后,还想把处理好的数据通过新增一个工作表直接追加到原来的 Excel 表中,又该怎么操作呢?
本文提供的方法是借助openpyxl模块来实现,本测试直接在上面 3.2 的文件基础上再写入一次 df1。
具体的操作如下:

  • 使用 openpyxl 模块的load_workbook()方法读取 Excel 表单
  • 对返回的 workbook 对象,使用create_sheet()方法新建一个工作表
  • 再把 df1 的数据写入。df1 的数据无法直接写入 workbook 对象,所以写入前,需要使用dataframe_to_rows()用于将 DataFrame 按行转为列表,然后遍历写入 Excel 新建的工作表中。
  • 最后,一定要记得使用save()保存。否则白干。
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows# 加载现有的Excel文件
filepath = r'D:\write_to_excel.xlsx'
workbook = load_workbook(filepath)
# 创建新的sheet表
new_sheet = workbook.create_sheet('测试追加用户信息表')for r in dataframe_to_rows(df1, index=False, header=True):new_sheet.append(r)# 保存更改到原Excel文件
workbook.save(filepath)

执行结果如下:
image.png

四、总结

本文介绍了 DataFrame 写入 Excel 的三种场景及方法,代码小结如下:

  • 数据准备
import pandas as pddata1 = {'姓名': ['张三', '李四', '王五'],'年龄': [25, 30, 35],'城市': ['北京', '上海', '深圳']
}data2 = {'课程': ['语文', '数学', '英语'],'分数': [90, 80, 70]
}df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
  • 场景一:将单个 DataFrame 写入 Excel 单个工作表
filepath = r'D:\write_to_excel.xlsx'
df1.to_excel(filepath, index=False)
  • 场景二:将多个 DataFrame 写入 Excel 多个工作表
filepath = r'D:\write_to_excel.xlsx'
with pd.ExcelWriter(filepath) as writer:  df1.to_excel(writer, index=False, sheet_name='测试-用户信息')df2.to_excel(writer, index=False, sheet_name='测试-课程信息')
  • 场景三:追加数据到原有Excel文件的工作表中
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows# 加载现有的Excel文件
filepath = r'D:\write_to_excel.xlsx'
workbook = load_workbook(filepath)
# 创建新的sheet表
new_sheet = workbook.create_sheet('测试追加用户信息表')for r in dataframe_to_rows(df1, index=False, header=True):new_sheet.append(r)# 保存更改到原Excel文件
workbook.save(filepath)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/735847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring boot2.7整合jetcache 本地linkedhashmap缓存方案

好 上文 Spring boot2.7整合jetcache 远程redis缓存方案 我们讲完了 远程实现方案 本文 我们来说说 本地 jetcache解决方案 首先是 application.yml 在jetcache下加上 local:default:type: linkedhashmapkeyConvertor: fastjson我们技术用的 本地缓存 linkedhashmap 这里 我们…

【大厂AI课学习笔记NO.69】使用开源管理仓库

了解了开源框架,开源项目,今天来学习开源管理仓库。 我们先说Git,开源的版本管理分布式系统。 GitHub,则是世界上最大的代码托管平台,面向开源和私有项目托管。 有的人总是分不清这两个,其实一个是版本管…

批量提取PDF指定区域内容到 Excel 以及根据PDF里面第一页的标题来批量重命名-附思路和代码实现

首先说明下,PDF需要是电子版本的,不能是图片或者无法选中的那种。 需求1:假如我有一批数量比较多的同样格式的PDF电子文档,需要把特定多个区域的数字或者文字提取出来 需求2:我有一批PDF文档,但是文件的名…

【C语言】——详解操作符(下)

【C语言】——详解操作符(下) 前言七、关系操作符八、逻辑操作符8.1、& 与运算符8.2、 | 或运算符 九、条件操作符十、逗号表达式十一、下标引用与函数调用操作符11.1、[ ] 下标引用操作符11.2、( ) 函数调用操作符 十二、 结构成员操作符12.1、…

新版ui周易测算网站H5源码/在线起名网站源码/运势测算网站系统源码,附带系统搭建教程

支持对接第三方支付 安装方法以linux为例 1、建议在服务器上面安装宝塔面板,以便操作,高逼格技术员可以忽略这步操作。 2、把安装包文件解压到根目录,同时建立数据库,把数据文件导入数据库 3、修改核心文件config/inc_config.…

“ReferenceError: AMap is not defined“

问题 笔者进行web开发&#xff0c;引入高德地图&#xff0c;控制台报错 "ReferenceError: AMap is not defined"详细问题 vue.runtime.esm.js:4662 [Vue warn]: Error in mounted hook: "ReferenceError: AMap is not defined"found in---> <Map&…

React-嵌套路由

1.概念 说明&#xff1a;在一级路由中又内嵌了其他路由&#xff0c;这种关系就叫做嵌套路由&#xff0c;嵌套至一级路由内的路由又称作二级路由。 2.实现步骤 说明&#xff1a;使用childen属性配置路由嵌套关系&#xff0c;使用<Outlet/>组件配置二级路由渲染的位置。…

吴恩达机器学习-可选实验室:逻辑回归,决策边界(Logistic Regression,Decision Boundary))

文章目录 目标数据集图数据逻辑回归模型复习逻辑回归和决策边界绘图决策边界恭喜 目标 在本实验中&#xff0c;你将:绘制逻辑回归模型的决策边界。这会让你更好地理解模型的预测。 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from lab_utils_co…

Redis核心数据结构之整数集合

整数集合 概述 整数集合(intset)是集合键的底层实现之一&#xff0c;当一个集合只包含整数值元素&#xff0c;并且这个结合的元素数量不多时&#xff0c;Redis就会使用整数集合作为集合键的底层实现。 例子 举个例子&#xff0c;如果创建一个只包含五个元素的集合键&#x…

MySQL 8.0 架构 之 慢查询日志(Slow query log)(2)流程图:查询记录到慢查询日志中的条件

文章目录 MySQL 8.0 架构 之 慢查询日志&#xff08;Slow query log&#xff09;&#xff08;2&#xff09;流程图&#xff1a;查询记录到慢查询日志中的条件确定查询是否会记录在慢查询日志中的流程图参考 【声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何…

JavaScript数组方法常用方法大全

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. push()2. pop()3. unshift()4. shift()5. isArray()6. map()7. filter()8. every()9. some()10. splice()11. slice()12. indexOf()13. includes()14. concat()1…

【大厂AI课学习笔记NO.76】人工智能人才金字塔

人工智能领域&#xff0c;分为源头创新人才、产业研发人才、应用开发人才和实用技能人才。 人工智能领域的人才结构呈现多样化特点&#xff0c;主要可以分为源头创新人才、产业研发人才、应用开发人才和实用技能人才四大类。这四大类人才在人工智能领域的发展中各自扮演着不可或…

Python刘诗诗

写在前面 刘诗诗在电视剧《一念关山》中饰演了女主角任如意&#xff0c;这是一个极具魅力的女性角色&#xff0c;她既是一位有着高超武艺和智慧的女侠士&#xff0c;也曾经是安国朱衣卫前左使&#xff0c;身怀绝技且性格坚韧不屈。剧中&#xff0c;任如意因不满于朱衣卫的暴行…

P1948 [USACO08JAN] Telephone Lines S

Here 典中之典&#xff01;&#xff01; 解题思路 可选k条边代价为0如何决策&#xff1f; 将到当前位置选择了几条代价为0的边放入状态&#xff0c;即若当前状态选的边数小于&#xff0c;则可以进行决策&#xff0c;是否选择当前边&#xff0c;若选&#xff0c;则&#xff0c…

基于智慧灯杆的智慧城市解决方案(2)

功能规划 智慧照明功能 智慧路灯的基本功能仍然是道路照明, 因此对照明功能的智慧化提升是最基本的一项要求。 对道路照明管理进行智慧化提升, 实施智慧照明, 必然将成为智慧城市中道路照明发展的主要方向之一。 智慧照明是集计算机网络技术、 通信技术、 控制技术、 数据…

uniapp:小程序数字键盘功能样式实现

代码如下&#xff1a; <template><view><view><view class"money-input"><view class"input-container" click"toggleBox"><view class"input-wrapper"><view class"input-iconone"…

C++ 队列

目录 队列的应用场景 1、429. N 叉树的层序遍历 2、 103. 二叉树的锯齿形层序遍历 3、662. 二叉树最大宽度 4、515. 在每个树行中找最大值 队列的应用场景 广度优先搜索&#xff08;BFS&#xff09;&#xff1a;队列是广度优先搜索算法的核心数据结构。在BFS中&#xff…

C语言:深入补码计算原理

C语言&#xff1a;深入补码计算原理 有符号整数存储原码、反码、补码转换规则数据与内存的关系 补码原理 有符号整数存储 原码、反码、补码 有符号整数的2进制表示方法有三种&#xff0c;即原码、反码和补码 三种表示方法均有符号位和数值位两部分&#xff0c;符号位用0表示“…

Linux:kubernetes(k8s)lable和selecto标签和选择器的使用(11)

通过标签是可以让我们的容器和容器之间相互认识&#xff0c;简单来说一边打了标签&#xff0c;一边使用选择器去选择就可以快速的让他们之间耦合 定义标签有两种办法&#xff0c;一个是文件中&#xff0c;一个是命令行里 我们在前几章编进文件的时候里面都有lable比如 这个就是…

rk3399使用阿里推理引擎MNN使用cpu和gpu进行benchmark,OpenCL效果不佳?

视频讲解 rk3399使用阿里推理引擎MNN使用cpu和gpu进行benchmark&#xff0c;OpenCL效果不佳&#xff1f; 背景 MNN是阿里开源的推理引擎&#xff0c;今天测试一下在rk3399平台上的benchmark怎么样&#xff1f; alibaba/MNN: MNN is a blazing fast, lightweight deep learning…