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.)
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
pd.concat
_ prend un Iterable
comme argument. Par conséquent, il ne peut pas prendre directement DataFrame
s comme argument. De plus, Dimension
s du DataFrame
devrait correspondre le long de l'axe lors de la concaténation.
pd.merge
peut prendre DataFrame
s comme argument et est utilisé pour combiner deux DataFrame
s 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 DataFrame
s avec des index différents.
J'essaie actuellement de comprendre les différences essentielles entre
pd.DataFrame.merge()
etpd.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