pandas.merge和DataFrame.join的用法區別


pandas:merge和DataFrame.join的用法區別

merge

  • pandas.merge
  • DataFrame.merge  這兩個方法的用法一樣。

join

  • DataFrame.join
  • Index.join  
  • Series.str.join 。簡單的字符串連接。
  • 3個join用法不一樣

 

Pandas.concat()只是簡單的合並表

 

DataFrame.join(self, other, on = None, how="left", lsuffix="", rsufix="")-> DataFrame

連接2個/多個DataFrame。對於簡單的索引合並,你還可以向join傳入一組DataFrame。

left2.join([right2, another])

 

可以通過columns和另一個DataFrame的column或index連接。

⚠️。如果2個DataFrame有相同名字的普通列,需要為2個表加后綴。

關於on的用法:

  • 如果沒有使用on參數,join函數判斷能否index-on-index, 如果2個表有重復列名,需要加上后綴。
  • 如果使用了on參數,on指定的列名或index name去連接other表的index 。

 

DataFrame.merge()

pd.merge(left, right, how="inner", left_on=None, right_on=None, left_index=False, right_index=False)

和join方法類似。但不一樣:主要區別在關聯方法上:

  • join方法
    • 默認使用index-on-index,
    • 如果有on參數,則用on參數指定的列名/index名來連接other的index。
  • merge方法
    • 默認,自動把2個表中有相同列名的列(重疊列)作為主鍵列。
    • 最好是明確指定on參數,此時列名/index name必須同時在2個表內出現。
    • 或者使用left_on和right_on參數作為連接的key。明確指定2個表要關聯的列名/index name
    • 或者使用left_index和right_index參數。

總結,都要理解,之后使用哪個就隨心了。

 

案例

如果有相同的列名,則未使用on,和使用on參數的例子:

df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})
df2 = pd.DataFrame({'key': list("abc"), "data2": range(3)})

pd.merge(df1, df2)  
#或者明確使用on參數:
pd.merge(df1, df2, on='key')

 

 

如果沒有相同列名,則使用left_on和right_on的例子:

df3 = pd.DataFrame({'lkey': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],'data1': range(7)})
df4 = pd.DataFrame({'rkey': ['a', 'b', 'd'], 'data2': range(3)})
pd.merge(df3, df4, left_on="lkey", right_on="rkey")
#
    lkey data1 rkey data2
0    b    0    b    1
1    b    1    b    1
2    b    6    b    1
3    a    2    a    0
4    a    4    a    0
5    a    5    a    0

 

⚠️默認how="inner"即內連接,所以df3中的c和df4中的d行沒有選中。how的參數有:left, right, outer, inner。

 

上面兩個例子,表的行關系是:多對1。如果是多對多,則發生笛卡爾積運算。

要根據多個鍵進行合並,傳入一個由列名組成的列表即可:

right = pd.DataFrame({'key1': ['foo', 'foo', 'bar', 'bar'], 'key2': ['one', 'one', 'one', 'two'], 'rval': [4, 5, 6, 7]})
left = pd.DataFrame({'key1': ['foo', 'foo', 'bar'], 'key2': ['one', 'two', 'one'], 'lval': [1, 2, 3]})
pd.merge(left, right, on=['key1', 'key2'])

 

merge函數自帶的參數suffixes,可以自動處理重復的列名。也可以自定義后綴suffixes=('_left', '_r ight'))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM