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

一、引言

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

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

二、准备工作

安装必要的库:pandas 和 openpyxl

pip install pandas
pip install openpyxl

准备测试数据

import pandas as pd

data1 = {
    '姓名': ['张三', '李四', '王五'],
    '年龄': [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 pd

data1 = {
    '姓名': ['张三', '李四', '王五'],
    '年龄': [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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024考研计算机考研复试-每日重点(第十九期)

公众号“准研计算机复试”,超全大佬复试资料,保姆级复试,80%的题目都是上岸大佬提供的。 研宝们,App更新啦! 操作系统: 10.★什么是中断? 中断是指计算机运行过程中,出现某些意外时…

win11 ubuntu子系统 开代理 调试 openai 接口

我的是laravel项目,步骤如下 步骤1:配置WSL以使用代理 首先,确保WSL中的所有请求都通过你的代理服务器。你可以通过在WSL的shell配置文件(如~/.bashrc或~/.zshrc)中设置环境变量来实现。打开终端,编辑对应…

snowny-小诺框架-标签tabs消失不见

可能是由于,在配置菜单时,排序数字过小造成的,将排序数字改成大于0的数字就好使了。

数码管的静态显示(二)

1.原理 要按照上图的顺序传递位选和段选的数据。 因为q0是最高位,共阳极数码管结构是dp....a,所以应该先传入低位a,而a在上图中的8段2进制编码中是seg[7],所以段选信号的顺序是seg[0],...seg[7]。 因为输出信号是两个时钟&#x…

【绩效管理】某连锁购物中心绩效考核体系搭建咨询项目

随着企业规模的扩大,员工数量不断增加,与之相关的人事管理工作的复杂性也随之增大。但是由于行业的特点,该购物中心的人员整体素质偏低,且自成立以来,该中心重经营轻管理,其人力资源管理水平也有待提升。在…

雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕

雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕 硬件平台 AT32A403A Board开发板 1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口GC9A01 产品介绍 推荐一个屏幕资料参考网站 http://www.lcdwiki.com/1.28inch_IPS_Module 1.28寸圆形IPS彩屏&…

2024.3.13 C++

思维导图 设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace…

微信小程序一次性订阅requestSubscribeMessage授权和操作详解

一次性订阅&#xff1a;用户订阅一次发一次通知 一、授权 — requestSubscribeMessage Taro.requestSubscribeMessage({tmplIds: [], // 需要订阅的消息模板的id的集合success (res) {console.log("同意授权", res)},fail(res) {console.log(拒绝授权, res)}})点击或…

【Hibernate-Validate】常用注解

常用注解: NotNull:被注释的元素(任何元素)必须不为 nul, 集合为空也是可以的。NotEmpty:用来校验字符串、集合、map、数组不能为null或也不能为空(字符串传入空格也不可以)(集合需至少包含一个元素)NotBlank:被注释的字符串的必须非空&#xff0c;空格也不行&#xff0c;空字…

在ubuntu20通过docker部署zabbix6

部署Zabbix 6.x服务器在Ubuntu 20.04 LTS系统上使用Docker的方式可以简化安装过程并实现容器化管理。以下是一个简化的步骤指南&#xff1a; 步骤1&#xff1a;安装Docker和Docker Compose 确保你的Ubuntu系统已经安装了Docker和Docker Compose。如果没有&#xff0c;请执行以…

下载指定版本的pytorch

下载网址&#xff1a;https://download.pytorch.org/whl/torch_stable.html 参考博客网址&#xff1a;https://blog.csdn.net/wusuoweiieq/article/details/132773977

2 配置虚拟机

1.打开VM&#xff0c;主页的界面如下&#xff0c;点击"创建新的虚拟机" 2.选择“自定义&#xff08;高级&#xff09;”&#xff0c;然后点击下一步&#xff0c;如下图所示&#xff1a; 3.下图直接点击“下一步” 4.下图的界面上&#xff0c;注意&#xff0c;不要选择…

蓝桥杯-质因数问题

约数&#xff0c;又称因数&#xff1a;a % b 0,则b称为a的约数&#xff0c;包括1和a。 例如4的正约数有&#xff1a;1、2、4。6的正约数有&#xff1a;1、2、3、6。质因数&#xff1a; 质因数&#xff08;素因数或质因子&#xff09;在数论里是指能整除给定正整数&#xff08;…

从零开始学习深度学习库-2:反向传播

欢迎来到本系列的第二篇文章&#xff0c;我们将从头开始构建一个深度学习库。 本博客系列的代码可以在这个Github仓库中找到。 上一篇文章 在上一篇文章中&#xff08;链接见这里&#xff09;&#xff0c;我们实现了线性层和常见的激活函数&#xff0c;并成功构建了神经网络的…

浅谈HTTP 和 HTTPS (中间人问题)

前言 由于之前的文章已经介绍过了HTTP , 这篇文章介绍 HTTPS 相对于 HTTP 做出的改进 开门见山: HTTPS 是对 HTTP 的加强版 主要是对一些关键信息 进行了加密 一.两种加密方式 1.对称加密 公钥 明文 密文 密文 公钥 明文 2.非对称加密 举个例子就好比 小区邮箱 提供一…

Python学习笔记-Flask实现简单的投票程序

1.导入flask包 from flask import Flask,jsonify,abort,make_response,request,render_template 2.初始化 Flask 应用: app Flask(__name__) 3. 定义投票种类 data [{id:0,name:劳动节,num:0},{id:1,name:国庆节,num:0},{id:2,name:春节,num:0} ] 4.app.route(/index): …

2024考研计算机考研复试-每日重点(第二十期)

公众号“准研计算机复试”&#xff0c;超全大佬复试资料&#xff0c;保姆级复试&#xff0c;80%的题目都是上岸大佬提供的。 研宝们&#xff0c;App更新啦&#xff01; 计算机组成原理&#xff1a; 10.☆什么是数据存储的大端模式和小端模式&#xff1f; 大端模式&#xff1a;数…

github拉取项目找不到前端代码

今天从github上拉取了一个项目&#xff0c;使用docker部署在了服务器上&#xff0c; 代码正常运行&#xff0c;但是想在下载的项目中找前端代码遇到了问题&#xff0c;项目结构中的template模板只有一个页面&#xff0c;于是查看nginx配置文件 查看index.html 引入了一些js文件…

EasyRecovery恢复电脑丢失数据怎么样?

电脑是我们大家熟悉并且常用的数据存储设备&#xff0c;也是综合性非常强的数据处理设备。对于电脑设备来讲&#xff0c;最主要的数据存储介质是硬盘&#xff0c;电脑硬盘被划分成多个分区&#xff0c;在电脑上表现为C盘&#xff0c;E盘等&#xff0c;用来保存系统文件以及其他…

easyrecovery破解版百度云(含Mac/Win版)以及EasyRecovery可以恢复哪些设备

软件介绍 当不小心将回收站的文件删除了怎么办&#xff1f;想找回但是不知道怎么找回需要的数据文件&#xff1f;别担心今天小编就为大家介绍一款非常专业的电脑数据文件恢复工具&#xff0c;easyrecovery14是由Ontrack专为电脑用户推出的一款专业的数据恢复软件&…