import pandas as pd
import numpy as npen hauteur pd.concat()¶
# exemple 1
# les deux dataframes ont les mêmes colonnes
# (ici on crée les dataframe à partir d'un dict décrivant les colonnes)
df1 = pd.DataFrame(
data={
'name': ['Bob', 'Lisa', 'Sue'],
'group': ['Accounting', 'Engineering', 'HR']})
df2 = pd.DataFrame(
data={
'name': ['John', 'Mary', 'Andrew'],
'group': ['HR', 'Accounting', 'Engineering',]})df1df2# nous ne gardons pas les index de chaque sous-dataframe
pd.concat([df1, df2], ignore_index=True)
# pd.concat([df1, df2], axis=0) # by default concat rows# nous indexons les dataframes par la colonne 'name'
pd.concat([df1.set_index('name'), df2.set_index('name')])en largeur pd.merge()¶
alignements¶
dans les deux cas, pandas va aligner les données
par exemple on peut concaténer deux tables qui ont les mêmes colonnes, même si elles sont dans le désordre
l’usage typique de merge()/join() est l’équivalent d’un JOIN en SQL (pour ceux à qui ça dit quelque chose)
sans indication, merge() calcule les colonnes communes et se sert de ça pour aligner les lignes
# exemple 1
# les deux dataframes ont exactement une colonne en commun: 'name'
df1 = pd.DataFrame(
data={
'name': ['Bob', 'Lisa', 'Sue'],
'group': ['Accounting', 'Engineering', 'HR'],
})
df2 = pd.DataFrame(
data={
'name': ['Lisa', 'Bob', 'Sue'],
'hire_date': [2004, 2008, 2014],
})df1df2# sans rien préciser, on JOIN sur la colonne commune 'name'
df1.merge(df2)# on peut aussi l'écrire comme ceci
pd.merge(df1, df2)# exemple 2
# cette fois il faut aligner l'index de gauche
# avec la colonne 'name' à droite
df1 = pd.DataFrame(
index = ['Bob', 'Lisa', 'Sue'], # l'index
data={'group': ['Accounting', 'Engineering', 'HR']}) # une seule colonne
df2 = pd.DataFrame(
data = {'name': ['Lisa', 'Bob', 'Sue'],
'hire_date': [2004, 2008, 2014]})df1df2# du coup ici sans préciser de paramètres, ça ne fonctionnerait pas
# il faut être explicite
df1.merge(df2, left_index=True, right_on='name')# ou encore
pd.merge(df1, df2, left_index=True, right_on='name')optionnel: stratégies pour `merge()¶
comme en SQL, on a à notre disposition plusieurs stratégies pour le merge (ou join, donc)
le paramètre how peut prendre les valeurs suivantes:
left: on ne garde que les clés qui sont dans la première dataframeright: on ne garde que les clés qui sont dans la seconde dataframeinner: on ne garde que les clés communesouter: on garde l’union des clés
(il y a aussi cross, mais c’est plus particulier comme usage..)