ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1245|回复: 6

[原创] [ Excel-Python ] -6:如何用 Python 把数据写入 Excel 文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-6-9 11:12 | 显示全部楼层 |阅读模式
本帖最后由 Hi-Frank 于 2021-6-10 18:35 编辑

如何用 Python 把数据写入 Excel 文件



0. 引子

又在高铁上了,祖国大好河山尽收眼底,抓紧时间再来一篇。
昨天看到许多朋友鼓励我更新,很有压力啊。谢谢支持。
image.jpg


花开几朵,各表一枝。表哪一枝呢?
继续写如何读多个 Sheet?,如何批量读多个文件?如何处理数据,整理行列?计算列?还是?什么是 DataFrame?

想了想,就写如何把数据写入Excel吧。

我们把 Excel数据读入 —— 数据处理 —— 数据写入,一个全流程,快快走完,建立完整宇宙观。
然后再抽丝剥茧慢慢讨论细节,如何?
请评论,有好的推进思路,也请指路




1. 把 DataFrame 数据写入一个新的 Excel 文件

先来一条最简单的语句,把上一讲我们新生成的 df5 的结果存入一个新文件:
  1. df5.to_excel(r'd:\demo\orders6.xlsx')
复制代码

截图如下。
注意只有 In[10] 那一行哦,前面8、9行是上一讲的,放到这帮你复习功课。
In[10] 再下面那一行啥也没有。说明 to_excel() 执行完了,没有任何反馈。没有消息,就是最好的消息,不罗嗦。

image.png


然后,在文件夹 D:\Demo 下,就多出来了一个文件 orders6.xlsx。内容如下:

image.jpg


爽不爽?




2. 如何写入多个 Sheet ?

首先,如何指定 Sheet 名?用 sheet_name 参数指定就好了,命令如下:
  1. df5.to_excel(r'd:\demo\orders7.xlsx',sheet_name='对账单')
复制代码
结果和上面的类似,只是 sheet 名称为 对账单。就不截图了。

聪明的我们想,如果执行如下两条语句,是不是就能写入两个 sheet 了吧?
  1. df5.to_excel(r'd:\demo\orders7.xlsx',sheet_name='对账单')
  2. df3.to_excel(r'd:\demo\orders7.xlsx',sheet_name='供应商')
复制代码
你试了吗?
哈哈,想错了。居然只有 供应商 sheet !如果你的数据被这样搞丢了,是不是想说 shit!
也就是说,后一条语句的执行结果, 覆盖了前一条语句。

幸亏我们用的新文件 orders7 试的。你要拿现有文件 order1 2 3 4 试,就把老文件的数据废了。

正确的方法是
使用 pandas 的 ExcelWriter() 对象。语法如下:
  1. writer1=pd.ExcelWriter(r'd:\demo\orders8.xlsx')

  2. df5.to_excel(writer1,sheet_name='对账单')
  3. df3.to_excel(writer1,sheet_name='供应商')

  4. writer1.save()
复制代码
这样就对了,我们打开新出现的 orders8.xlsx文件,看看:

image.jpg




为什么呢?
因为,ExcelWriter() 对象创建并打开了一个文件,后续的 to_excel() 将 DataFrame 的数据写入该 ExcelWriter() 对象的指定 sheet 中。最后,用 ExcelWriter()对象的 save() 方法关闭了此文件。


如果不用 ExcelWriter ,而直接是本贴刚刚开始那样写,其本质,并不是不用 ExcelWriter,
而是,因为 to_excel() 方法中直接给了文件名而不是ExcelWriter对象,那么,他就自动新建了一个基于此文件名的ExcelWriter,然后写入,然后,顺手又给直接关了。
目的是简化代码,人家是好心,却可能导致你误解。




还有,上面的写法不够 Python 风格,或称 Pythonic,会被大神笑的。
更好的写法至少是:
  1. with pd.ExcelWriter(r'd:\demo\orders9.xlsx') as writer2:
  2.     df5.to_excel(writer2,sheet_name='对账单')
  3.     df3.to_excel(writer2,sheet_name='供应商')
复制代码
注意 第一行后面的冒号,以及后两行前面的空格,都是必须的。
Python 语法的 代码块,不用大括号{}, 而是用 冒号 和 缩进。




n. 更多问题

好了,到今天,我们走了一个全过程。读 Excel 数据——处理数据——写入数据。
但是,每一步都只是简单演示,有许多细节问题需要展开。
慢慢来吧。

—— HiFrank  我跑,故我在。



<<< 上一讲:[ Excel-Python ] -5:用 Python 实现 Excel 的 VLookup 功能
http://club.excelhome.net/thread-1587767-1-1.html

下一讲:>>>
[ Excel-Python ] -7:用 Python 展示 Excel 中的数据
http://club.excelhome.net/thread-1588241-1-1.html


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-6-9 13:55 | 显示全部楼层
学习了,学习了

TA的精华主题

TA的得分主题

发表于 2021-6-9 15:47 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-9 16:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
messagexiaoxi 发表于 2021-6-9 15:47
建议楼主搞一个贴子就行,集中些好学习

谢谢您的建议。
不过,确实没有时间啊,只能抽零星时间写。
而且,估计内容也很长,估计要写很久,或者说这个话题可能一直写下去...
一个帖子的话,又担心反而队形不好。
可以点击我的头像,点击主题,就清楚了。
谢谢
.

TA的精华主题

TA的得分主题

发表于 2021-6-22 09:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-6-22 11:22 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-22 14:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
flyfairy 发表于 2021-6-22 11:22
学习一下,python还是很强大的

加油啊,从头开始,一步步来
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-3 00:42 , Processed in 0.055758 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表