python - 熊貓中merge()和concat()之間的差異




pandas join (3)

我目前正在嘗試了解 pd.DataFrame.merge()pd.concat() 之間的本質區別。

好問題。 主要區別:

pd.concat 在兩個軸上均有效。

另一個區別是 pd.concat 具有 內部 默認 聯接和 內部 聯接,而 pd.DataFrame.merge() 具有 left right pd.DataFrame.merge() 內部 默認 聯接。

第三個值得注意的其他區別是: pd.DataFrame.merge() 可以選擇在合併具有相同名稱的列時設置列後綴,而對於 pd.concat 則不可能。

默認情況下,使用 pd.concat 可以堆疊多個數據幀的行( axis=0 ),並且當您設置 axis=1 時,您可以模仿 pd.DataFrame.merge() 函數。

pd.concat 一些有用示例:

df2=pd.concat([df]*2, ignore_index=True) #double the rows of a dataframe

df2=pd.concat([df, df.iloc[[0]]]) # add first row to the end

df3=pd.concat([df1,df2], join='inner', ignore_index=True) # concat two df's

pd.DataFrame.merge()pd.concat() 之間的本質區別是什麼?

到目前為止,這是我發現的,請評論我的理解是多麼完整和準確:

  • .merge() 只能使用列(加上行索引),並且在語義上適合於數據庫樣式的操作。 .concat() 可以與任一軸一起使用,僅使用索引,並提供添加分層索引的選項。

  • 順便提及,這允許以下冗餘:兩者都可以使用行索引組合兩個數據幀。

  • pd.DataFrame.join() 僅提供 pd.DataFrame.join() 用例的一部分的簡寫

(Pandas擅長解決數據分析中的各種用例。探索文檔以找出執行特定任務的最佳方法可能有些艱鉅。)


一個非常高的差異是, merge() 用於基於公共列的值組合兩個(或多個)數據幀(也可以使用索引,使用 left_index=True 和/或 right_index=True ),以及 concat() 用於將一個(或多個)數據幀一個接一個地追加到另一個(或橫向),具體取決於 axis 選項設置為0還是1。

join() 用於根據索引合併2個數據幀; 代替使用帶有選項 left_index=True merge() ,我們可以使用 join()

例如:

df1 = pd.DataFrame({'Key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})

df1:
   Key  data1
0   b   0
1   b   1
2   a   2
3   c   3
4   a   4
5   a   5
6   b   6

df2 = pd.DataFrame({'Key': ['a', 'b', 'd'], 'data2': range(3)})

df2:
    Key data2
0   a   0
1   b   1
2   d   2

#Merge
# The 2 dataframes are merged on the basis of values in column "Key" as it is 
# a common column in 2 dataframes

pd.merge(df1, df2)

   Key data1 data2
0   b    0    1
1   b    1    1
2   b    6    1
3   a    2    0
4   a    4    0
5   a    5    0

#Concat
# df2 dataframe is appended at the bottom of df1 

pd.concat([df1, df2])

   Key data1 data2
0   b   0     NaN
1   b   1     NaN
2   a   2     NaN
3   c   3     NaN
4   a   4     NaN
5   a   5     NaN
6   b   6     NaN
0   a   Nan   0
1   b   Nan   1
2   d   Nan   2

pd.concatIterable 作為其參數。 因此,它不能直接將 DataFrame 用作其參數。 串聯時, DataFrame Dimension 也應沿軸匹配。

pd.merge 可以將 DataFrame 用作其參數,並用於將兩個具有相同列或索引的 DataFrame 組合在一起,而 pd.concat 無法做到,因為它將在DataFrame中顯示重複的列。

而join可以用於連接具有不同索引的兩個 DataFrame





concat