前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >合并多个Excel文件,Python相当轻松

合并多个Excel文件,Python相当轻松

作者头像
fanjy
发布2022-04-13 14:07:52
3.8K0
发布2022-04-13 14:07:52
举报
文章被收录于专栏:完美Excel

标签:Python与Excel,pandas

下面是一个应用场景:

我在保险行业工作,每天处理大量数据。有一次,我受命将多个Excel文件合并到一个“主电子表格”中。每个Excel文件都有不同的保险单数据字段,如保单编号、年龄、性别、投保金额等。这些文件有一个共同的列,即保单ID。在过去,我只会使用Excel和VLOOKUP公式,或者Power Query的合并数据函数。这些工具工作得很好,然而,当我们需要处理大型数据集时,它们就成了一种负担。

此时,Python可以上场了。

注意:本文讨论的是合并具有公共ID但不同数据字段的Excel文件。

Excel文件

下面是一些模拟的电子表格,这些数据集非常小,仅用于演示。

图1:投保基本信息.xlsx

图2:投保金与类型.xlsx

图3:到期保单.xlsx

注:如果你不想自己输入,那么可以到知识星球完美Excel社群下载这些演示工作簿。

注意到“保险ID”列包含一个称为“唯一密钥标识符”的内容,该标识符可用于链接三个电子表格中的保单。由于熟悉Excel,我的第一反应是:这很容易,VLOOKUP函数将能完成这项工作。我可以使用VLOOKUP查找每个“保险ID”的值,并将所有数据字段合并到一个电子表格中!结果证明这是个坏主意,因为我要处理数十万条记录,我花了大约一整天的时间用数百万的VLOOKUP和其他公式构建了一个庞大的电子表格。

这是我创建过的最糟糕的Excel文件之一。电子表格的大小是150MB,每当我进行更改时,重新计算大约需要30分钟。真是浪费时间和精力,太可怕了!

如果当时了解Python,那么可以为我节省大量的时间和精力。(即等待电子表格重新计算)

使用Python

像往常一样,先导入pandas库,然后将所有三个Excel文件读入Python。

图4

我们知道,pandas数据框架是一个表格数据对象,它看起来完全像Excel电子表格——行、列和单元格。

图5:pandas数据框架,看起来就像Excel电子表格一样

pandas有一个方法.merge()来高效地合并多个数据集。

df_combine = df_1.merge(df_2, left_on=’保险ID’, right_on=’ID’)

df_combine = df_combine.merge(df_3, on=’保险ID’)

第一次合并

这里,df_1称为左数据框架,df_2称为右数据框架,将df_2与df_1合并基本上意味着我们将两个数据帧框架的所有数据合并在一起,使用一个公共的唯一键匹配df_2到df_1中的每条记录。

就像Excel VLOOKUP公式一样,只是我们用一行代码而不是数百万个公式获得了相同的结果!

注意,在第一个Excel文件中,“保险ID”列包含保险编号,而在第二个Excel文件中,“ID”列包含保险编号,因此我们必须指定,对于左侧数据框架(df_1),希望使用“保险ID”列作为唯一键;而对于右侧的数据框架(df_2),我们希望使用“ID”列作为唯一键。

df_1和df_2中的记录数相同,因此我们可以进行一对一的匹配,并将两个数据框架合并在一起。

图6:合并数据框架,共21行和8列

第二次合并

我们获取第一次合并操作的结果,然后与另一个df_3合并。这一次,因为两个df都有相同的公共列“保险ID”,所以我们只需要使用on='保险ID'来指定它。最终的组合数据框架有8行11列。

图7

关于最终组合数据框架的一些有趣的观察结果:

“保险ID”(来自df_1)和“ID”(来自df_2)都被带到了数据框架中,我们必须删除一个来清理数据。

有两个“保单现金值”列,保单现金值_x(来自df_2)和保单现金值_y(来自df_3)。当有两个相同的列时,默认情况下,pandas将为列名的末尾指定后缀“_x”、“_y”等。我们可以通过在merge()方法中使用可选参数suffixes=('_x','_y')来更改后缀。

最终数据框架中只有8行,这是因为df_3只有8条记录。默认情况下,merge()执行”内部”合并,使用来自两个数据框架的键的交集,类似于SQL内部联接。

放在一起

代码语言:javascript
复制
import pandas as pd
# 从Excel文件装载数据集
df_1 = pd.read_excel('D:\投保基本信息.xlsx')
df_2 = pd.read_excel('D:\投保金与类型.xlsx')
df_3 = pd.read_excel('D:\到期保单.xlsx')
# 合并数据集
df_combine = df_1.merge(df_2,left_on='保险ID', right_on='ID')
df_combine = df_combine.merge(df_3,on='保险ID')
# 输出回Excel
df_combine.to_excel('D:\combine_df.xlsx')

合并操作的性能:Excel与Python

你可能已经熟悉Excel,并且知道如果有数千个查找公式,它会有多慢,而此时Python合并两个大型数据集的速度会飞快。

通过使用Python处理数据需求,你的工作效率会有质的提高。我想,是时候开始使用它了!

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

本文分享自 完美Excel 微信公众号,前往查看

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

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

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