web-dev-qa-db-fra.com

Différence (s) entre merge () et concat () dans pandas

Quelle est la différence essentielle entre pd.DataFrame.merge() et pd.concat()?

Jusqu'à présent, voici ce que j'ai trouvé. Veuillez commenter à quel point ma compréhension est complète et précise:

  • .merge() ne peut utiliser que des colonnes (plus des index de lignes) et convient sémantiquement aux opérations de style base de données. .concat() peut être utilisé avec l'un ou l'autre axe, en utilisant uniquement des index, et offre la possibilité d'ajouter un index hiérarchique.

  • Incidemment, cela permet la redondance suivante: les deux peuvent combiner deux images en utilisant les index des lignes.

  • pd.DataFrame.join() n'offre qu'un raccourci pour un sous-ensemble des cas d'utilisation de .merge()

(Les pandas sont parfaits pour traiter un très large éventail de cas d'utilisation en analyse de données. Explorer la documentation pour déterminer le meilleur moyen d'accomplir une tâche particulière peut s'avérer un peu intimidant.)

47
WindChimes

Une différence très importante est que merge() est utilisé pour combiner deux images de données (ou plus) sur la base des valeurs de colonnes communes (des index peuvent également être utilisés, utilisez left_index=True Et/ou right_index=True), Et concat() est utilisé pour ajouter une (ou plusieurs) image (s) de données l'une sous l'autre (ou latéralement, selon que l'option axis est définie sur 0 ou 1 ).

join() est utilisé pour fusionner 2 images de données sur la base de l'index; au lieu d'utiliser merge() avec l'option left_index=True, nous pouvons utiliser join().

Par exemple:

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
46
Abhishek Sawant

pd.concat _ prend un Iterable comme argument. Par conséquent, il ne peut pas prendre directement DataFrames comme argument. De plus, Dimensions du DataFrame devrait correspondre le long de l'axe lors de la concaténation.

pd.merge peut prendre DataFrames comme argument et est utilisé pour combiner deux DataFrames avec les mêmes colonnes ou index, ce qui ne peut pas être fait avec pd.concat car il montrera la colonne répétée dans le DataFrame.

Alors que join peut être utilisé pour joindre deux DataFrames avec des index différents.

J'essaie actuellement de comprendre les différences essentielles entre pd.DataFrame.merge() et pd.concat().

Bonne question. La différence principale:

pd.concat fonctionne sur les deux axes.

L’autre différence est que pd.concat A intérieuredefault et externe ne fait que s'inscrire, alors que pd.DataFrame.merge() a left, droit, externe, innerdefault se joint.

La troisième différence notable est: pd.DataFrame.merge() a l'option de définir les suffixes de colonne lors de la fusion de colonnes portant le même nom, alors que pour pd.concat, Cela n'est pas possible.


Avec pd.concat Par défaut, vous pouvez empiler des lignes de plusieurs images (axis=0) Et lorsque vous définissez le paramètre axis=1, Vous imitez la fonction pd.DataFrame.merge().

Quelques exemples utiles de 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