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

news2025/1/17 3:14:48

一、引言

本文主要介绍如何将 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)

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

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

相关文章

传统机器学习 基于TF_IDF的文本聚类实现

简介 使用sklearn基于TF_IDF算法,实现把文本变成向量。再使用sklearn的kmeans聚类算法进行文本聚类。 个人观点:这是比较古老的技术了,文本转向量的效果不如如今的 text2vec 文本转向量好。 而且sklearn 不支持GPU加速,处理大量…

交流回馈老化测试负载如何实现这些功能的

交流回馈老化测试负载是一种用于模拟电力系统中各种负载特性的装置,它可以对电力设备进行长时间的老化测试,以确保其在实际运行中的稳定性和可靠性。交流回馈老化测试负载主要通过以下几个方面实现这些功能: 1. 模拟负载特性:交流…

基于YOLOv8深度学习的野外火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

Python 界面逻辑分离示例

本示例使用的发卡设备:https://item.taobao.com/item.htm?id615391857885&spma1z10.5-c.w4002-21818769070.11.6cc85700Robi3x 一、Python 安装PyQt5,运行 Qt Designer 新建窗体文件,在窗体中拖放控件 完成界面设计,保存为…

模拟信号隔离放大器导轨式直流信号转换器0-5V0-10V4-20mA0-75mV0-20mA负载能力0-85mA/0-165mA /0-200mA

概述 导轨安装DIN11HVI 系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成厚模电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要直流信号隔离测控的行业。此系列产品内部采用了线性光电隔离技术相比电磁隔离具有更…

UI 设计师的工作职责是什么?需要掌握哪些技能?

什么是 UI 设计? UI 设计是设计用户界面的一门学科。用户界面是一个人与应用程序、网站或软件之间的联系。类似于平面设计和网页设计,UI 设计者是一种视觉设计师。 即时设计 - 可实时协作的专业 UI 设计工具即时设计是一款支持在线协作的专业级 UI 设计…

算法思想总结:二分查找算法

创作不易,感谢三连!! 一、二分查找算法思路总结 大家先看总结,然后再根据后面的题型去慢慢领悟 二、二分查找(easy) . - 力扣(LeetCode)二分查找 思路:(模…

哪个牌子的大路灯对学生的视力好?一文带你了解大路灯

大路灯在如今市场中销量越来越高,与传统台灯相比,大路灯采用LED灯和专业的护眼技术,可以有效缓解用眼疲劳、帮助放松和舒适照明。但需要注意的是,目前市场中品牌类型较多,也有很多劣质的产品,比如网红或跨界…

吴恩达CNN之卷积初学习---二维卷积

1、卷积的实现 从左到右的矩阵可以看作:一幅图像、过滤器filter(核)、另一幅图像 编程中卷积的实现:支持卷积的深度学习框架都会有一些函数实现这个卷积运算 python:conv_forward函数 TensorFlow:tf.nn.…

ZStack Cloud云平台承载都江堰市人民医院核心业务

三甲医院都江堰市人民医院通过ZStack Cloud云平台对医院信息化架构进行了全面升级改造:一期通过ZStack Cloud云平台分布式存储,承载OA、短信、数字图书馆、餐厅消费系统、体检服务等一般业务;二期通过ZStack Cloud云平台承载医院HIS管理系统、…

18个惊艳的可视化大屏(第23辑):电子政务,一目了然如胸。

数据展示与监控: 可视化大屏可以将政务数据以图表、地图、仪表盘等形式展示出来,直观地呈现政务工作的进展、趋势和关键指标。通过大屏监控,政府部门可以实时了解各项指标的情况,及时发现问题并采取相应措施。 决策支持&#xff…

wifi的5G和3GPP的5G

wifi 5G 跑的是802.11的协议。 wifi的5G指的就是频率,例如wifi2.4G,其频段处于2.400GHz~2.4835GHz之间,wifi5G的频率范围为5.15GHz到5.875GHz,其中包括多个频道。 这里有个误区,并不是运行在5GHz频段的WI-FI就是5G …

鸿蒙:文本滑动选择器弹窗

根据指定的选择范围创建文本选择器,展示在弹窗上。 该组件从API Version 8开始支持 TextPickerDialog.show show(options?: TextPickerDialogOptions) 定义文本滑动选择器弹窗并弹出。 TextPickerDialogOptions参数: 参数名 参数类型 必填 参数…

第四百回 channel

文章目录 1. 知识回顾2. 示例代码3. 经验总结 我们在上一章回中介绍了MethodChannel的使用方法,本章回中将介绍EventChannel的使用方法.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在前面章回中介绍了通道的概念和作用,并且提到了…

探索数据可视化:Matplotlib 高级绘图功能(四)

3D图形 线形图&散点图 import numpy as np import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d.axes3d import Axes3Dx np.linspace(0,60,300) y np.sin(x) z np.cos(x)fig plt.figure(figsize(9,6)) a3 Axes3D(fig) # 二维变成3D a3.plot(x,y,z)plt.figure…

SecureCRT出现乱码的解决方法

SecureCRT是一个商业终端连接工具,它支持多种自定义设置。默认设置下,通过SecureCRT连接SSH服务器可能出现中文乱码的情况。这是由于SecureCRT字符编码与服务器的字符编码不一致造成的。 当然解决这个问题也很简单,将SecureCRT字符编码设置成…

原型模式(Clone)——创建型模式

原型模式(clone)——创建型模式 什么是原型模式? 原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需依赖它们所属的类。 总结:需要在继承体系下,实现一个clone接口,在这个方法中以本身作为拷…

Cesium--基于材质旋转图片

材质部分的代码如下 // 自定义材质const customMaterial new Cesium.Material({translucent: true,fabric: {uniforms: {image:circle_img,speed:30.0,},source: czm_material czm_getMaterial(czm_materialInput materialInput){czm_material material czm_getDefaultMateri…

spring中事务失效的场景有哪些?

异常捕获处理 在方法中已经将异常捕获处理掉并没有抛出。 事务只有捕捉到了抛出的异常才可以进行处理,如果有异常业务中直接捕获处理掉没有抛出,事务是无法感知到的。 解决:在catch块throw抛出异常。 抛出检查异常 spring默认只会回滚非检…

Unity Timeline学习笔记(1) - 创建TL和添加动画片段

Timeline在刚出的时候学习了一下,但是因为一些原因一直都没用在工作中使用。 版本也迭代了很久不用都不会用了,抽时间回顾和复习一下,做一个笔记后面可以翻出来看。 创建Timeline 首先我们创建一个场景,放入一个Plane地板&#…