Exemples de comment fusionner (merger) deux ou plusieurs colonnes d'une dataframe en une seule colonne avec pandas ?
Fusionner deux colonnes de chaîne de caractères ou plus avec pandas
Commençons par créer une dataframe avec pandas
import pandas as pdimport numpy as npdata = {'First_Name':['April','Emory','David','Alice','Virginia'],'Last_Name':['Reiter','Miller','Ballin','Trotter','Rios'],'Middle_Name':['G.','','H.G','',''],'Age':[42,24,12,32,56]}df = pd.DataFrame(data=data)print(df)
donne
First_Name Last_Name Middle_Name Age0 April Reiter G. 421 Emory Miller 242 David Ballin H.G 123 Alice Trotter 324 Virginia Rios 56
Fusionner deux colonnes de chaîne de caractères
Pour fusionner deux colonnes de chaînes de caractères, une solution simple consiste à faire :
df['First_Name'] + df['Last_Name']
donne alors
0 AprilReiter1 EmoryMiller2 DavidBallin3 AliceTrotter4 VirginiaRiosdtype: object
Pour ajouter un espace :
df['First_Name'] + ' ' + df['Last_Name']
donne
0 April Reiter1 Emory Miller2 David Ballin3 Alice Trotter4 Virginia Riosdtype: object
Une autre solution consiste à utiliser pandas.DataFrame.agg:
df[['First_Name','Last_Name']].agg(' '.join, axis=1)
donne
0 April Reiter1 Emory Miller2 David Ballin3 Alice Trotter4 Virginia Riosdtype: object
Un autre exemple, l'agrégation de trois colonnes
df[['First_Name','Middle_Name','Last_Name']].agg(' '.join, axis=1)
donne
0 April G. Reiter1 Emory Miller2 David H.G Ballin3 Alice Trotter4 Virginia Riosdtype: object
Créez une colonne Full_Name :
df['Full_Name'] = df[['First_Name','Middle_Name','Last_Name']].agg(' '.join, axis=1)print(df)
donne
First_Name Last_Name Middle_Name Age Full_Name0 April Reiter G. 42 April G. Reiter1 Emory Miller 24 Emory Miller2 David Ballin H.G 12 David H.G Ballin3 Alice Trotter 32 Alice Trotter4 Virginia Rios 56 Virginia Rios
Notez que certaines lignes de la colonne Full_Name comportent deux espaces. Pour résoudre ce problème :
df['Full_Name'].str.replace(" "," ")
donne
0 April G. Reiter1 Emory Miller2 David H.G Ballin3 Alice Trotter4 Virginia RiosName: Full_Name, dtype: object
Fusionner une colonne de chaîne de caractères avec une colonne d'entiers
Pour fusionner une colonne de chaîne de caractères avec une colonne d'entiers, il faut d'abord convertir les nombres en une chaîne. Pour ce faire, une solution consiste à utiliser astype ():
df['Last_Name'] + ' ' + df['Age'].astype(str)
donne
0 Reiter 421 Miller 242 Ballin 123 Trotter 324 Rios 56dtype: object
Un autre exemple utilisant agg():
df[['Last_Name','Age']].apply(lambda x : x.astype(str)).agg(' '.join, axis=1)
donne
0 Reiter 421 Miller 242 Ballin 123 Trotter 324 Rios 56dtype: object
Fusionner des colonnes de nombres
Créons un nouvelle dataframe
import pandas as pdimport numpy as npdata = {'First_Name':['April','Emory','David','Alice','Virginia'],'Last_Name':['Reiter','Miller','Ballin','Trotter','Rios'],'Middle_Name':['G.','','H.G','',''],'Age':[42,24,12,32,56],'Score':[2,10,5,3,10]}df = pd.DataFrame(data=data)print(df)
donne
First_Name Last_Name Middle_Name Age Score0 April Reiter G. 42 21 Emory Miller 24 102 David Ballin H.G 12 53 Alice Trotter 32 34 Virginia Rios 56 10
Alors
print( df['Age'] + df['Score'] )
va ajouter les deux colonnes ensemble :
0 441 342 173 354 66dtype: int64
Pour concaténer les deux nombres :
print( df['Age'].astype(str) + ' -- '+ df['Score'].astype(str) )
donne
0 42 -- 21 24 -- 102 12 -- 53 32 -- 34 56 -- 10dtype: object
