web-dev-qa-db-ja.com

pandasのmerge()とconcat()の違い

pd.DataFrame.merge()pd.concat()の本質的な違いは何ですか?

これまでのところ、これは私が見つけたものです。私の理解がどれほど完全で正確かについてコメントしてください:

  • .merge()は列(および行インデックス)のみを使用でき、データベース形式の操作に意味的に適しています。 .concat()は、インデックスのみを使用していずれかの軸で使用でき、階層インデックスを追加するオプションを提供します。

  • ちなみに、これにより次の冗長性が可能になります。どちらも行インデックスを使用して2つのデータフレームを結合できます。

  • pd.DataFrame.join()は、単に.merge()のユースケースのサブセットの省略形を提供するだけです。

(Pandasは、データ分析の非常に広範囲のユースケースに対処するのに優れています。特定のタスクを実行するための最良の方法を把握するために、ドキュメントを探索するのは少々困難です。)

47
WindChimes

現在、pd.DataFrame.merge()pd.concat()の本質的な違いを理解しようとしています。

いい質問ですね。主な違い:

pd.concat は両方の軸で機能します。

もう1つの違いは、pd.concatinnerを持っていることですdefault およびouterは結合のみ、 pd.DataFrame.merge()leftrightouterinnerdefault 参加します。

3番目の注目すべきその他の違いは、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
1
prosti