前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >懂Excel就能轻松入门Python数据分析包pandas(十六):合并数据

懂Excel就能轻松入门Python数据分析包pandas(十六):合并数据

作者头像
咋咋
发布2021-09-01 14:38:51
1.2K0
发布2021-09-01 14:38:51
举报
文章被收录于专栏:数据大宇宙

> 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死。后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器—— pandas

前言

本系列上一节说了拆分数据的案例,这次自然是说下怎么合并数据。

> 随着需求复杂度提高,很多时候已经不能用 excel 自带功能实现了,不过 pandas 中许多概念与 excel 不谋而合

案例1

公司的销售系统功能不全,导出数据时只能把各个部门独立一个 Excel 文件,此时你需要对整体数据做分析,最好的方式当然是先把各个文件统一汇总起来:

- 注意看,虽然每个表的标题一样,但是他们的顺序可能出现不一致

这里有3个关键点:

- 如何获得一个文件夹中所有文件的路径

- 加载 Excel 文件数据

- 列标题对齐的情况下,多个数据合并

这次我们需要用到3个包:

- pandas 不用多说

- from pathlib import Path ,用于获取文件夹中文件的路径

- openpyxl 用于读取 Excel 文件所有的工作表

我们来看看如何用 pandas 完成需求:

- Path('案例1').glob('*.xlsx') ,获得指定文件夹(案例1)中的所有 Excel 文件路径

- pd.read_excel(f) ,加载 Excel 数据

- pd.concat(dfs) ,合并多个数据,pandas 自动进行索引对齐

> 关于 pathlib 的知识点,请关注公众号的入门必备系列文章

上面是普通的写法,这场景我倾向于使用推导式:

> 推导式内容,请看 数据大宇宙 > Python入门必备 > 必备知识 > 细讲Python推导式

案例2

有时候,表格中没有必要的信息,如下:

- 这次表格中没有部门列,部门的信息只能在文件名字中获取

- df['部门'] = f.stem ,pandas 中添加一列值是非常容易。f.stem 是不带后缀的文件名字

为什么上面不用推导式呢?因为推导式只适合一行连续调用的写法,当然这里还是可以使用推导式实现的:

- DataFrame.assign(部门=f.stem) 是一个添加列并且返回修改后的数据的方法,特别适合这种场景下使用

> 各种创建或移除行列数据的应用,请留意专栏文章

案例3

实际工作中还有更麻烦的情况,比如一个部门文件中又按性别划分了不同的工作表:

- 也就是说,通过文件名字获得部门名字,通过工作表名字获得性别信息

其实,道理与案例2是一样的,只要知道怎么获取一个 Excel 文件的工作表名字,问题即可迎刃而解:

- openpyxl.load_workbook(f).worksheets ,利用 openpyxl 包,读取文件的所有工作表名字

- .assign(部门=f.stem,性别=wk.title) ,wk.title 即使工作表名字

总结

- pathlib 包中的类 Path 是个处理文件路径的好东西

- Path 的 方法 glob('*.xlsx') ,即可获取一个目录下所有的 Excel 文件

- pd.concat ,合并多个 DataFrame,并且能够自动对齐表头

- 当需要往 DataFrame 添加新列时,可以考虑使用 assign

- openpyxl.load_workbook(f).worksheets ,获取 Excel 文件的工作表对象。其中的 title 属性,即是工作表名字

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据大宇宙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档