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 pd
import numpy as np
data = {'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 Age
0 April Reiter G. 42
1 Emory Miller 24
2 David Ballin H.G 12
3 Alice Trotter 32
4 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 AprilReiter
1 EmoryMiller
2 DavidBallin
3 AliceTrotter
4 VirginiaRios
dtype: object
Pour ajouter un espace :
df['First_Name'] + ' ' + df['Last_Name']
donne
0 April Reiter
1 Emory Miller
2 David Ballin
3 Alice Trotter
4 Virginia Rios
dtype: object
Une autre solution consiste à utiliser pandas.DataFrame.agg:
df[['First_Name','Last_Name']].agg(' '.join, axis=1)
donne
0 April Reiter
1 Emory Miller
2 David Ballin
3 Alice Trotter
4 Virginia Rios
dtype: 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. Reiter
1 Emory Miller
2 David H.G Ballin
3 Alice Trotter
4 Virginia Rios
dtype: 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_Name
0 April Reiter G. 42 April G. Reiter
1 Emory Miller 24 Emory Miller
2 David Ballin H.G 12 David H.G Ballin
3 Alice Trotter 32 Alice Trotter
4 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. Reiter
1 Emory Miller
2 David H.G Ballin
3 Alice Trotter
4 Virginia Rios
Name: 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 42
1 Miller 24
2 Ballin 12
3 Trotter 32
4 Rios 56
dtype: object
Un autre exemple utilisant agg():
df[['Last_Name','Age']].apply(lambda x : x.astype(str)).agg(' '.join, axis=1)
donne
0 Reiter 42
1 Miller 24
2 Ballin 12
3 Trotter 32
4 Rios 56
dtype: object
Fusionner des colonnes de nombres
Créons un nouvelle dataframe
import pandas as pd
import numpy as np
data = {'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 Score
0 April Reiter G. 42 2
1 Emory Miller 24 10
2 David Ballin H.G 12 5
3 Alice Trotter 32 3
4 Virginia Rios 56 10
Alors
print( df['Age'] + df['Score'] )
va ajouter les deux colonnes ensemble :
0 44
1 34
2 17
3 35
4 66
dtype: int64
Pour concaténer les deux nombres :
print( df['Age'].astype(str) + ' -- '+ df['Score'].astype(str) )
donne
0 42 -- 2
1 24 -- 10
2 12 -- 5
3 32 -- 3
4 56 -- 10
dtype: object