网易首页 > 网易号 > 正文 申请入驻

在 Pandas 中使用 Merge、Join 、Concat合并数据的效率对比

0
分享至

在 Pandas 中有很多种方法可以进行DF的合并。本文将研究这些不同的方法,以及如何将它们应用到我们的数据中。

Pandas 使用 .merge() 方法来执行合并。

import pandas as pd
# a dictionary to convert to a dataframe
data1 = {'identification': ['a', 'b', 'c', 'd'],
'Customer_Name':['King', 'West', 'Adams', 'Mercy'], 'Category':['furniture', 'Office Supplies', 'Technology', 'R_materials'],}
# our second dictionary to convert to a dataframe
data2 = {'identification': ['a', 'b', 'c', 'd'],
'Class':['First_Class', 'Second_Class', 'Same_day', 'Standard Class'],
'Age':[60, 30, 40, 50]}
# Convert the dictionary into DataFrame
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

运行我们的代码后,有两个 DataFrame,如下所示。

identification Customer_Name Category 0 a King furniture 1 b West Office Supplies 2 c Adams Technology 3 d Mercy R_materials identification Class Age 0 a First_Class 60 1 b Second_Class 30 2 c Same_day 40 3 d Standard Class 50

使用 merge() 函数进一步合并。

# using .merge() function

new_data = pd.merge(df1, df2, on='identification')

这产生了下面的新数据;

identification Customer_Name Category
0 a King furniture
1 b West Office Supplies
2 c Adams Technology
3 d Mercy R_materials
identification Class Age
0 a First_Class 60
1 b Second_Class 30
2 c Same_day 40
3 d Standard Class 50

.join() 方法也可以将不同索引的 DataFrame 组合成一个新的 DataFrame。 我们可以使用参数‘on’参数指定根据哪列进行合并。

让我们看看下面的例子,我们如何将单索引 DataFrame 与多索引 DataFrame 连接起来;

import pandas as pd
# a dictionary to convert to a dataframe
data1 = {
'Customer_Name':['King', 'West', 'Adams'],
'Category':['furniture', 'Office Supplies', 'Technology'],} 7
# our second dictionary to convert to a dataframe
data2 = {
'Class':['First_Class', 'Second_Class', 'Same_day', 'Standard Class'],
'Age':[60, 30, 40, 50]}
# Convert the dictionary into DataFrame
Ndata = pd.DataFrame(data1, index=pd.Index(['a', 'b', 'c'], name='identification'))
index = pd.MultiIndex.from_tuples([('a', 'x0'), ('b', 'x1'),
('c', 'x2'), ('c', 'x3')],
names=['identification', 'x']) 19
# Convert the dictionary into DataFrame
Ndata2 = pd.DataFrame(data2, index= index)
print(Ndata, "\n\n", Ndata2)
# joining singly indexed with
# multi indexed
result = Ndata.join(Ndata2, how='inner')

我们的结果如下所示;

Customer_Name Category Class Age
identification x 3 a x0 King furniture First_Class 60
b x1 West Office Supplies Second_Class 30
c x2 Adams Technology Same_day 40
x3 Adams Technology Standard Class 50

Pandas 中concat() 方法在可以在垂直方向(axis=0)和水平方向(axis=1)上连接 DataFrame。 我们还可以一次连接两个以上的 DataFrame 或 Series。

让我们看一个如何在 Pandas 中执行连接的示例;

import pandas as pd
# a dictionary to convert to a dataframe
data1 = {'identification': ['a', 'b', 'c', 'd'],
'Customer_Name':['King', 'West', 'Adams', 'Mercy'],
'Category':['furniture', 'Office Supplies', 'Technology', 'R_materials'],}
# our second dictionary to convert to a dataframe
data2 = {'identification': ['a', 'b', 'c', 'd'],
'Class':['First_Class', 'Second_Class', 'Same_day', 'Standard Class'],
'Age':[60, 30, 40, 50]}
# Convert the dictionary into DataFrame
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
#perform concatenation here based on horizontal axis
new_data = pd.concat([df1, df2], axis=1)
print(new_data)

这样就获得了新的 DataFrame :

identification Customer_Name Category identification \
0 a King furniture a 3 1 b West Office Supplies b 4 2 c Adams Technology c 5 3 d Mercy R_materials d
Class Age
0 First_Class 60
1 Second_Class 30
2 Same_day 40
3 Standard Class 50

Pandas 中的Merge Joins操作都可以针对指定的列进行合并操作(SQL中的join)那么他们的执行效率是否相同呢?下面我们来进行一下测。

两个 DataFrame 都有相同数量的行和两列,实验中考虑了从 100 万行到 1000 万行的不同大小的 DataFrame,并在每次实验中将行数增加了 100 万。我对固定数量的行重复了十次实验,以消除任何随机性。下面是这十次试验中合并操作的平均运行时间。

上图描绘了操作所花费的时间(以毫秒为单位)。

正如我们从图中看到的,运行时间存在显着差异——最多相差 5 倍。随着 DataFrame 大小的增加,运行时间之间的差异也会增加。 两个 JOIN 操作几乎都随着 DataFrame 的大小线性增加。 但是,Join的运行时间增加的速度远低于Merge。

如果需要处理大量数据,还是请使用join()进行操作。

https://avoid.overfit.cn/post/e5572b2110ac489fafa226403e70105d

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
小杨哥首部竖屏付费短剧收视率不佳:粗制滥造,亿级粉丝也没用!

小杨哥首部竖屏付费短剧收视率不佳:粗制滥造,亿级粉丝也没用!

鑫鑫说说
2024-06-18 15:43:41
一旦苹果退出中国市场,会有什么样的后果?郭台铭的回答一针见血

一旦苹果退出中国市场,会有什么样的后果?郭台铭的回答一针见血

最潮家居评
2024-06-20 07:50:07
《金庸武侠世界》为啥不叫《射雕英雄传》?原来是“雕”被改没了

《金庸武侠世界》为啥不叫《射雕英雄传》?原来是“雕”被改没了

那些故事有点远
2024-06-20 01:20:03
网红“铁拳出击”出轨女粉丝后续:女方承认,聊天记录辣眼睛

网红“铁拳出击”出轨女粉丝后续:女方承认,聊天记录辣眼睛

阿莱美食汇
2024-06-19 18:42:49
是什么影响了民营的信心?专家在回避最简单的事实

是什么影响了民营的信心?专家在回避最简单的事实

永不出场的戈多
2024-06-17 12:04:16
尴不尴尬?众多科学家追踪17年的外星信号,竟被一个实习生破案了

尴不尴尬?众多科学家追踪17年的外星信号,竟被一个实习生破案了

莫将离
2024-06-18 22:31:54
可笑!2024年养老金上调3%,工龄30年养老金3000元只涨90元?

可笑!2024年养老金上调3%,工龄30年养老金3000元只涨90元?

社保精算师
2024-06-19 11:25:04
喜剧演员变悲剧演员,乌克兰只剩中老年人,泽连斯基竟继续玩火

喜剧演员变悲剧演员,乌克兰只剩中老年人,泽连斯基竟继续玩火

振雨在线
2024-06-03 10:12:00
马卡头版:皇马已与约罗达成协议,纳乔离开后将启动交易

马卡头版:皇马已与约罗达成协议,纳乔离开后将启动交易

懂球帝
2024-06-20 06:00:10
林更新凌晨五点大骂网友,却被一句话彻底拿捏,直接公开求饶?

林更新凌晨五点大骂网友,却被一句话彻底拿捏,直接公开求饶?

每日漓说
2024-06-18 23:35:15
“一丝不挂”新舞蹈?惹争议,被摸下体更不害臊,金星质疑是对的

“一丝不挂”新舞蹈?惹争议,被摸下体更不害臊,金星质疑是对的

吃鱼思故渊
2024-05-16 21:48:21
杭州保姆纵火案通灵记录:通灵人与被害人交流,得知朱小贞真实死因

杭州保姆纵火案通灵记录:通灵人与被害人交流,得知朱小贞真实死因

古今档案
2024-06-18 20:56:33
15时,林高远陈幸同官宣喜讯,刘国梁破例,马龙送祝福

15时,林高远陈幸同官宣喜讯,刘国梁破例,马龙送祝福

东球弟
2024-06-19 10:57:10
金正恩的隆重,远远超出普京的想象

金正恩的隆重,远远超出普京的想象

兰妮搞笑分享
2024-06-19 18:57:08
玲花被问:天天跟曾毅在一起,老公吃醋吗?没想到耿直回答笑翻了

玲花被问:天天跟曾毅在一起,老公吃醋吗?没想到耿直回答笑翻了

学史思今
2024-06-18 17:00:02
放弃社会主义制度的20多个国家,现在的状况都怎么样了

放弃社会主义制度的20多个国家,现在的状况都怎么样了

云舟史策
2024-06-17 19:30:33
喝茶对心脏到底是好是坏?医生苦劝:4种茶,一口都不要喝

喝茶对心脏到底是好是坏?医生苦劝:4种茶,一口都不要喝

宋若讲故事
2023-01-18 21:38:26
伤停15天姆巴佩报销!法国队变阵!40场9球混子首发,本泽马笑了

伤停15天姆巴佩报销!法国队变阵!40场9球混子首发,本泽马笑了

阿泰希特
2024-06-19 10:56:16
越闹越大!南方医科大无法自圆其说,举报学生身份被扒出

越闹越大!南方医科大无法自圆其说,举报学生身份被扒出

看晓天下事
2024-06-16 13:10:53
38岁已婚女与37岁情人,在石凳子上发生关系,温存后被残忍杀害

38岁已婚女与37岁情人,在石凳子上发生关系,温存后被残忍杀害

胖胖侃咖
2024-06-08 08:00:08
2024-06-20 09:08:49
deephub
deephub
CV NLP和数据挖掘知识
1372文章数 1416关注度
往期回顾 全部

科技要闻

美国AI圈震动! “OpenAI宫斗”核心人物苏茨克维官宣创业

头条要闻

德对华最强硬部长将访华 专家:或向中方传递三层意思

头条要闻

德对华最强硬部长将访华 专家:或向中方传递三层意思

体育要闻

欧洲杯最大的混子,非他莫属

娱乐要闻

黄一鸣“杀疯了” 直播间卖大葱养孩子

财经要闻

茅台大跌,谁的锅?

汽车要闻

双肾格栅变化大/内饰焕新 新一代宝马X3官图发布

态度原创

本地
游戏
旅游
数码
公开课

本地新闻

中式沙拉宇宙的天花板,它必须有姓名

《龙腾世纪影障守护者》等级上限50级 技能树分三种

旅游要闻

遭遇极端高温天气导致希腊多名游客死亡

数码要闻

罗斯・杨称苹果今年第四季度推出 14/16 英寸 M4 MacBook Pro

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版