Exemple de comment diviser une colonne avec des noms en colonnes avec des prénoms et des noms de famille avec pandas
Créer une dataframe avec pandas
Commençons par créer une dataframe avec des pandas :
import pandas as pd
import numpy as np
data = {'Full_Name':['April Reiter','Emory Miller','David Ballin','Alice Trotter','Virginia Alicia Rios']}
df = pd.DataFrame(data=data)
print(df)
donne
Full_Name
0 April Reiter
1 Emory Miller
2 David Ballin
3 Alice Trotter
4 Virginia Rios
Diviser le nom complet en 2 colonnes
Pour diviser la colonne appelée Full_Name, une solution consiste à utiliser pandas.Series.str.split:
df['Full_Name'].str.split(expand=True)
0 1
0 April Reiter
1 Emory Miller
2 David Ballin
3 Alice Trotter
4 Virginia Rios
Une autre solution avec pandas.Series.str.extract and a regular expression
df['Full_Name'].str.extract(r'(\w+) (\w+)', expand=True)
donne
0 1
0 April Reiter
1 Emory Miller
2 David Ballin
3 Alice Trotter
4 Virginia Rios
Pour donner directement un nom aux nouvelles colonnes il suffit de faire :
df['Full_Name'].str.extract(r'(?P<First_Name>\w+) (?P<Last_Name>\w+)', expand=True)
donne alors
First_Name Last_Name
0 April Reiter
1 Emory Miller
2 David Ballin
3 Alice Trotter
4 Virginia Rios
Un autre exemple
Voyons un exemple plus compliqué : supposons que l'un des noms complets soit un deuxième prénom ici "Virginia Alicia Rios" au lieu de "Virginia Rios" auparavant :
import pandas as pd
import numpy as np
data = {'Full_Name':['April Reiter','Emory Miller','David Ballin','Alice Trotter','Virginia Alicia Rios']}
df = pd.DataFrame(data=data)
print(df)
donne
Full_Name
0 April Reiter
1 Emory Miller
2 David Ballin
3 Alice Trotter
4 Virginia Alicia Rios
alors
df['Full_Name'].str.split(expand=True)
renverra trois colonnes :
0 1 2
0 April Reiter None
1 Emory Miller None
2 David Ballin None
3 Alice Trotter None
4 Virginia Alicia Rios
Pour obtenir seulement deux colonnes, une solution consiste à utiliser extract
df['Full_Name'].str.extract(r'(?P<First_Name>\w+) (?P<Last_Name>\w+)', expand=True)
donne
First_Name Last_Name
0 April Reiter
1 Emory Miller
2 David Ballin
3 Alice Trotter
4 Virginia Alicia
Cependant on peut voir que le nom de famille de Virginia est Alicia ici pas Rios. Pour résoudre ce problème, une solution consiste à ajouter un $ :
print( df['Full_Name'].str.extract(r'(?P<First_Name>\w+) (?P<Last_Name>\w+)$', expand=True) )
donne
First_Name Last_Name
0 April Reiter
1 Emory Miller
2 David Ballin
3 Alice Trotter
4 Alicia Rios