Diviser une seule colonne en plusieurs colonnes dans la colonne Pandas DataFrame
Pandas a une méthode bien connue pour diviser une colonne de chaîne ou une colonne de texte par des tirets, des espaces et une colonne de retour (Series
) de listes ; si on parle de pandas, le terme Series
s’appelle la colonne Dataframe.
Nous pouvons utiliser la fonction pandas Series.str.split()
pour diviser les chaînes en plusieurs colonnes autour d’un séparateur ou d’un délimiteur donné. Elle est similaire à la méthode Python string split()
mais s’applique à l’ensemble de la colonne Dataframe. Nous avons le moyen le plus simple de séparer la colonne ci-dessous de la suivante.
Cette méthode sépare la chaîne Series
de l’index initial.
Series.str.split(pat=None, n=-1, expand=False)
Essayons de comprendre le fonctionnement de cette méthode
# import Pandas as pd
import pandas as pd
# innitilize Dataframe
df = pd.DataFrame(
{
"Email": [
"Alex.jhon@gmail.com",
"Hamza.Azeez@gmail.com",
"Harry.barton@hotmail.com",
],
"Number": ["+44-3844556210", "+44-2245551219", "+44-1049956215"],
"Location": ["Alameda,California", "Sanford,Florida", "Columbus,Georgia"],
}
)
print("Dataframe series:\n", df)
Nous avons créé un Dataframe df
avec trois colonnes, Email
, Number
et Location
. Notez que les chaînes de la colonne E-mail ont un modèle spécifique. Cependant, si vous regardez de plus près, cette colonne peut être divisée en deux colonnes. Nous résoudrons très bien le problème requis.
Production :
Dataframe series :
Email Number Location
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia
Nous allons utiliser la fonction Series.str.split()
pour séparer la colonne Number
et passer le -
dans la méthode split()
. Assurez-vous de passer True
au mot-clé expand
.
Exemple 1:
print(
"\n\nSplit 'Number' column by '-' into two individual columns :\n",
df.Number.str.split(pat="-", expand=True),
)
Cet exemple divisera chaque valeur de la série (Nombre) par -
.
Production :
Split 'Number' column into two individual columns :
0 1
0 +44 3844556210
1 +44 2245551219
2 +44 1049956215
Si nous n’utilisons que le paramètre d’expansion Series.str.split(expand=True)
, cela permettra de diviser les espaces mais pas possible de séparer avec -
et -
ou toute expression régulière si elle existe dans la chaîne, vous devez passer paramètre pat
.
Renommez ces colonnes fractionnées.
df[["Dialling Code", "Cell-Number"]] = df.Number.str.split("-", expand=True)
print(df)
Nous avons créé deux nouvelles séries Code de numérotation
et Cell-Number
et attribué les valeurs à l’aide de la série Number
.
Production :
Email Number Location Dialling Code \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California +44
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida +44
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia +44
Cell-Number
0 3844556210
1 2245551219
2 1049956215
Exemple 2 :
Dans cet exemple, nous allons diviser la série Location
par ,
.
df[["City", "State"]] = df.Location.str.split(",", expand=True)
print(df)
Divisez la série Location
et stockez ses valeurs dans des séries individuelles City
et State
.
Production :
Email Number Location City \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California Alameda
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida Sanford
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia Columbus
State
0 California
1 Florida
2 Georgia
Voyons le dernier exemple. Nous séparerons le nom complet dans la série Email
.
full_name = df.Email.str.split(pat="@", expand=True)
print(full_name)
Production :
0 1
0 Alex.jhon gmail.com
1 Hamza.Azeez gmail.com
2 Harry.barton hotmail.com
Maintenant, nous séparons les prénoms et noms de famille par .
.
df[["First Name", "Last Name"]] = full_name[0].str.split(".", expand=True)
print(df)
Production :
Email Number Location First Name \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California Alex
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida Hamza
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia Harry
Last Name
0 jhon
1 Azeez
2 barton
Le paramètre n=-1
ne fonctionnera pas si expand=True
est passé dans la méthode .split()
.
print(df["Email"].str.split("@", n=-1, expand=True))
Production :
0 1
0 George Washington
1 Hamza Azeez
2 Harry Walker
L’ensemble du code d’exemple est ci-dessous.
# import Pandas as pd
import pandas as pd
# create a new Dataframe
df = pd.DataFrame(
{
"Email": [
"Alex.jhon@gmail.com",
"Hamza.Azeez@gmail.com",
"Harry.barton@hotmail.com",
],
"Number": ["+44-3844556210", "+44-2245551219", "+44-1049956215"],
"Location": ["Alameda,California", "Sanford,Florida", "Columbus,Georgia"],
}
)
print("Dataframe series :\n", df)
print(
"\n\nSplit 'Number' column by '-' into two individual columns :\n",
df.Number.str.split(pat="-", expand=True),
)
df[["Dialling Code", "Cell-Number"]] = df.Number.str.split("-", expand=True)
print(df)
df[["City", "State"]] = df.Location.str.split(",", expand=True)
print(df)
full_name = df.Email.str.split(pat="@", expand=True)
print(full_name)
df[["First Name", "Last Name"]] = full_name[0].str.split(".", expand=True)
print(df)
Production :
Dataframe series :
Email Number Location
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia
Split 'Number' column by '-' into two individual columns :
0 1
0 +44 3844556210
1 +44 2245551219
2 +44 1049956215
Email Number Location Dialling Code \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California +44
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida +44
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia +44
Cell-Number
0 3844556210
1 2245551219
2 1049956215
Email Number Location Dialling Code \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California +44
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida +44
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia +44
Cell-Number City State
0 3844556210 Alameda California
1 2245551219 Sanford Florida
2 1049956215 Columbus Georgia
0 1
0 Alex.jhon gmail.com
1 Hamza.Azeez gmail.com
2 Harry.barton hotmail.com
Email Number Location Dialling Code \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California +44
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida +44
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia +44
Cell-Number City State First Name Last Name
0 3844556210 Alameda California Alex jhon
1 2245551219 Sanford Florida Hamza Azeez
2 1049956215 Columbus Georgia Harry barton
Article connexe - Pandas DataFrame
- Comment obtenir les en-têtes de colonne de Pandas DataFrame sous forme de liste
- Comment supprimer une colonne de Pandas DataFrame
- Comment convertir la colonne DataFrame en date-heure dans Pandas
- Comment convertir un float en un entier dans Pandas DataFrame
- Comment trier le DataFrame de Pandas par les valeurs d'une colonne
- Comment obtenir l'agrégat des Pandas par groupe et par somme