在 Pandas 中有很多種方法可以進行DF的合并。
本文將研究這些不同的方法,以及如何將它們執(zhí)行速度的對比。
合并
Pandas 使用 .merge() 方法來執(zhí)行合并。
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() 函數(shù)進一步合并。

#using.merge()function new_data=pd.merge(df1,df2,on='identification')這產生了下面的新數(shù)據(jù);
identificationCustomer_NameCategoryClassAge 0aKingfurnitureFirst_Class60 1bWestOfficeSuppliesSecond_Class30 2cAdamsTechnologySame_day40 3dMercyR_materialsStandardClass50
.join() 方法也可以將不同索引的 DataFrame 組合成一個新的 DataFrame。我們可以使用參數(shù)‘on’參數(shù)指定根據(jù)哪列進行合并。
? 讓我們看看下面的例子,我們如何將單索引 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 中執(zhí)行連接的示例;
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)那么他們的執(zhí)行效率是否相同呢?下面我們來進行一下測。 兩個 DataFrame 都有相同數(shù)量的行和兩列,實驗中考慮了從 100 萬行到 1000 萬行的不同大小的 DataFrame,并在每次實驗中將行數(shù)增加了 100 萬。我對固定數(shù)量的行重復了十次實驗,以消除任何隨機性。下面是這十次試驗中合并操作的平均運行時間。

上圖描繪了操作所花費的時間(以毫秒為單位)。
正如我們從圖中看到的,運行時間存在顯著差異——最多相差 5 倍。隨著 DataFrame 大小的增加,運行時間之間的差異也會增加。兩個 JOIN 操作幾乎都隨著 DataFrame 的大小線性增加。但是,Join的運行時間增加的速度遠低于Merge。
如果需要處理大量數(shù)據(jù),還是請使用join()進行操作。
-
函數(shù)
+關注
關注
3文章
4417瀏覽量
67504 -
代碼
+關注
關注
30文章
4968瀏覽量
73960 -
merge
+關注
關注
0文章
5瀏覽量
2631 -
concat
+關注
關注
0文章
3瀏覽量
2041
原文標題:Pandas 中使用 Merge、Join 、Concat 合并數(shù)據(jù)的效率對比
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
Fork/Join的框架機制詳解
pandas使用步驟
pandas是什么?
pandas是什么?
對于merge、join和concat三者的區(qū)別分析
Git命令解析-merge、rebase
5個必須知道的Pandas數(shù)據(jù)合并技巧
應用層關聯(lián)的優(yōu)勢 MySQL不推薦使用join的原因
如何優(yōu)化MySQL中的join語句
Python Pandas如何來管理結構化數(shù)據(jù)
git rebase和git merge的區(qū)別
pandas中合并數(shù)據(jù)的5個函數(shù)
Pandas DataFrame的存儲格式性能對比
Pandas中使用Merge、Join、Concat合并數(shù)據(jù)的效率對比
評論