在 Pandas 中有很多种方法可以进行DF的合并。
本文将研究这些不同的方法,以及如何将它们执行速度的对比。
合并
Pandas 使用 .merge() 方法来执行合并。
importpandasaspd #adictionarytoconverttoadataframe data1={'identification':['a','b','c','d'], 'Customer_Name':['King','West','Adams','Mercy'],'Category':['furniture','OfficeSupplies','Technology','R_materials'],} #ourseconddictionarytoconverttoadataframe data2={'identification':['a','b','c','d'], 'Class':['First_Class','Second_Class','Same_day','StandardClass'], 'Age':[60,30,40,50]} #ConvertthedictionaryintoDataFrame df1=pd.DataFrame(data1) df2=pd.DataFrame(data2)运行我们的代码后,有两个 DataFrame,如下所示。
identificationCustomer_NameCategory 0aKingfurniture 1bWestOfficeSupplies 2cAdamsTechnology 3dMercyR_materials identificationClassAge 0aFirst_Class60 1bSecond_Class30 2cSame_day40 3dStandardClass50
使用 merge() 函数进一步合并。
#using.merge()function new_data=pd.merge(df1,df2,on='identification')这产生了下面的新数据;
identificationCustomer_NameCategoryClassAge 0aKingfurnitureFirst_Class60 1bWestOfficeSuppliesSecond_Class30 2cAdamsTechnologySame_day40 3dMercyR_materialsStandardClass50
.join() 方法也可以将不同索引的 DataFrame 组合成一个新的 DataFrame。我们可以使用参数‘on’参数指定根据哪列进行合并。
让我们看看下面的例子,我们如何将单索引 DataFrame 与多索引 DataFrame 连接起来;
importpandasaspd #adictionarytoconverttoadataframe data1={ 'Customer_Name':['King','West','Adams'], 'Category':['furniture','OfficeSupplies','Technology'],}7 #ourseconddictionarytoconverttoadataframe data2={ 'Class':['First_Class','Second_Class','Same_day','StandardClass'], 'Age':[60,30,40,50]} #ConvertthedictionaryintoDataFrame 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 #ConvertthedictionaryintoDataFrame Ndata2=pd.DataFrame(data2,index=index) print(Ndata," ",Ndata2) #joiningsinglyindexedwith #multiindexed result=Ndata.join(Ndata2,how='inner')
我们的结果如下所示;
Customer_NameCategoryClassAge identificationx3ax0KingfurnitureFirst_Class60 bx1WestOfficeSuppliesSecond_Class30 cx2AdamsTechnologySame_day40 x3AdamsTechnologyStandardClass50
连接DF
Pandas 中concat() 方法在可以在垂直方向(axis=0)和水平方向(axis=1)上连接 DataFrame。我们还可以一次连接两个以上的 DataFrame 或 Series。
让我们看一个如何在 Pandas 中执行连接的示例;
importpandasaspd #adictionarytoconverttoadataframe data1={'identification':['a','b','c','d'], 'Customer_Name':['King','West','Adams','Mercy'], 'Category':['furniture','OfficeSupplies','Technology','R_materials'],} #ourseconddictionarytoconverttoadataframe data2={'identification':['a','b','c','d'], 'Class':['First_Class','Second_Class','Same_day','StandardClass'], 'Age':[60,30,40,50]} #ConvertthedictionaryintoDataFrame df1=pd.DataFrame(data1) df2=pd.DataFrame(data2) #performconcatenationherebasedonhorizontalaxis new_data=pd.concat([df1,df2],axis=1) print(new_data)这样就获得了新的 DataFrame :
identificationCustomer_NameCategoryidentification 0aKingfurniturea31bWestOfficeSuppliesb42cAdamsTechnologyc53dMercyR_materialsd ClassAge 0First_Class60 1Second_Class30 2Same_day40 3StandardClass50
Merge和Join的效率对比
Pandas 中的Merge Joins操作都可以针对指定的列进行合并操作(SQL中的join)那么他们的执行效率是否相同呢?下面我们来进行一下测。 两个 DataFrame 都有相同数量的行和两列,实验中考虑了从 100 万行到 1000 万行的不同大小的 DataFrame,并在每次实验中将行数增加了 100 万。我对固定数量的行重复了十次实验,以消除任何随机性。下面是这十次试验中合并操作的平均运行时间。
上图描绘了操作所花费的时间(以毫秒为单位)。
正如我们从图中看到的,运行时间存在显着差异——最多相差 5 倍。随着 DataFrame 大小的增加,运行时间之间的差异也会增加。两个 JOIN 操作几乎都随着 DataFrame 的大小线性增加。但是,Join的运行时间增加的速度远低于Merge。
如果需要处理大量数据,还是请使用join()进行操作。
-
函数
+关注
关注
3文章
4327浏览量
62569 -
代码
+关注
关注
30文章
4779浏览量
68519 -
merge
+关注
关注
0文章
5浏览量
2473 -
concat
+关注
关注
0文章
3浏览量
1916
原文标题:Pandas 中使用 Merge、Join 、Concat 合并数据的效率对比
文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论