本帖最后由 Hi-Frank 于 2021-6-10 18:35 编辑
如何用 Python 把数据写入 Excel 文件
0. 引子
又在高铁上了,祖国大好河山尽收眼底,抓紧时间再来一篇。
昨天看到许多朋友鼓励我更新,很有压力啊。谢谢支持。
花开几朵,各表一枝。表哪一枝呢?
继续写如何读多个 Sheet?,如何批量读多个文件?如何处理数据,整理行列?计算列?还是?什么是 DataFrame?
想了想,就写如何把数据写入Excel吧。
我们把 Excel数据读入 —— 数据处理 —— 数据写入,一个全流程,快快走完,建立完整宇宙观。
然后再抽丝剥茧慢慢讨论细节,如何?
请评论,有好的推进思路,也请指路
1. 把 DataFrame 数据写入一个新的 Excel 文件
先来一条最简单的语句,把上一讲我们新生成的 df5 的结果存入一个新文件:
- df5.to_excel(r'd:\demo\orders6.xlsx')
复制代码
截图如下。
注意只有 In[10] 那一行哦,前面8、9行是上一讲的,放到这帮你复习功课。
In[10] 再下面那一行啥也没有。说明 to_excel() 执行完了,没有任何反馈。没有消息,就是最好的消息,不罗嗦。
然后,在文件夹 D:\Demo 下,就多出来了一个文件 orders6.xlsx。内容如下:
爽不爽?
2. 如何写入多个 Sheet ?
首先,如何指定 Sheet 名?用 sheet_name 参数指定就好了,命令如下:
- df5.to_excel(r'd:\demo\orders7.xlsx',sheet_name='对账单')
复制代码 结果和上面的类似,只是 sheet 名称为 对账单。就不截图了。
聪明的我们想,如果执行如下两条语句,是不是就能写入两个 sheet 了吧?
- df5.to_excel(r'd:\demo\orders7.xlsx',sheet_name='对账单')
- df3.to_excel(r'd:\demo\orders7.xlsx',sheet_name='供应商')
复制代码 你试了吗?
哈哈,想错了。居然只有 供应商 sheet !如果你的数据被这样搞丢了,是不是想说 shit!
也就是说,后一条语句的执行结果, 覆盖了前一条语句。
幸亏我们用的新文件 orders7 试的。你要拿现有文件 order1 2 3 4 试,就把老文件的数据废了。
正确的方法是:
使用 pandas 的 ExcelWriter() 对象。语法如下:
- writer1=pd.ExcelWriter(r'd:\demo\orders8.xlsx')
- df5.to_excel(writer1,sheet_name='对账单')
- df3.to_excel(writer1,sheet_name='供应商')
- writer1.save()
复制代码 这样就对了,我们打开新出现的 orders8.xlsx文件,看看:
为什么呢?
因为,ExcelWriter() 对象创建并打开了一个文件,后续的 to_excel() 将 DataFrame 的数据写入该 ExcelWriter() 对象的指定 sheet 中。最后,用 ExcelWriter()对象的 save() 方法关闭了此文件。
如果不用 ExcelWriter ,而直接是本贴刚刚开始那样写,其本质,并不是不用 ExcelWriter,
而是,因为 to_excel() 方法中直接给了文件名而不是ExcelWriter对象,那么,他就自动新建了一个基于此文件名的ExcelWriter,然后写入,然后,顺手又给直接关了。
目的是简化代码,人家是好心,却可能导致你误解。
还有,上面的写法不够 Python 风格,或称 Pythonic,会被大神笑的。
更好的写法至少是:
- with pd.ExcelWriter(r'd:\demo\orders9.xlsx') as writer2:
- df5.to_excel(writer2,sheet_name='对账单')
- 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
|