Teilen Sie eine einzelne Spalte in mehrere Spalten in Pandas DataFrame Column auf

Pandas hat eine bekannte Methode zum Aufteilen einer Zeichenkettenspalte oder Textspalte durch Bindestriche, Leerzeichen und eine Rückgabespalte (Reihe
) von Listen; Wenn wir über Pandas sprechen, wird der Begriff Series
als Dataframe-Spalte bezeichnet.
Wir können die Pandas-Funktion Series.str.split()
verwenden, um Strings in mehreren Spalten um ein bestimmtes Trennzeichen oder Trennzeichen herum aufzuteilen. Sie ähnelt der Python-String-Methode split()
, gilt aber für die gesamte Dataframe-Spalte. Wir haben die einfachste Möglichkeit, die folgende Spalte zu trennen.
Diese Methode trennt den Series
-String vom Anfangsindex.
Series.str.split(pat=None, n=-1, expand=False)
Lassen Sie uns versuchen, die Funktionsweise dieser Methode zu verstehen
# 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)
Wir haben einen Datenrahmen df
mit drei Spalten erstellt, Email
, Nummer
und Standort
. Beachten Sie, dass die Zeichenketten in der E-Mail-Spalte ein bestimmtes Muster haben. Bei genauerem Hinsehen lässt sich diese Spalte jedoch in zwei Spalten aufteilen. Wir werden das erforderliche Problem sehr gut lösen.
Ausgabe:
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
Wir verwenden die Funktion Series.str.split()
, um die Spalte Number
zu trennen, und übergeben das -
in der Methode split()
. Stellen Sie sicher, dass Sie True
an das Schlüsselwort expand
übergeben.
Beispiel 1:
print(
"\n\nSplit 'Number' column by '-' into two individual columns :\n",
df.Number.str.split(pat="-", expand=True),
)
In diesem Beispiel wird jeder Wert von series (Number) durch -
geteilt.
Ausgabe:
Split 'Number' column into two individual columns :
0 1
0 +44 3844556210
1 +44 2245551219
2 +44 1049956215
Wenn wir nur den Erweiterungsparameter Series.str.split(expand=True)
verwenden, erlaubt dies das Aufteilen von Leerzeichen, ist jedoch nicht möglich, um mit -
und `` oder einem regulären Ausdruck zu trennen, falls er in der Zeichenfolge vorhanden ist, müssen Sie übergeben pat
-Parameter.
Lassen Sie uns diese geteilten Spalten umbenennen.
df[["Dialling Code", "Cell-Number"]] = df.Number.str.split("-", expand=True)
print(df)
Wir haben zwei neue Serien Vorwahl
und Cell-Number
erstellt und die Werte mit der Number
-Serie zugewiesen.
Ausgabe:
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
Beispiel 2:
In diesem Beispiel teilen wir die Serie Location
durch ,
auf.
df[["City", "State"]] = df.Location.str.split(",", expand=True)
print(df)
Teilen Sie die Location
-Serie auf und speichern Sie ihre Werte in den einzelnen Serien City
und State
.
Ausgabe:
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
Sehen wir uns das letzte Beispiel an. Wir werden den vollständigen Namen in der Reihe Email
trennen.
full_name = df.Email.str.split(pat="@", expand=True)
print(full_name)
Ausgabe:
0 1
0 Alex.jhon gmail.com
1 Hamza.Azeez gmail.com
2 Harry.barton hotmail.com
Nun trennen wir Vor- und Nachnamen durch .
.
df[["First Name", "Last Name"]] = full_name[0].str.split(".", expand=True)
print(df)
Ausgabe:
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
Der Parameter n=-1
funktioniert nicht, wenn expand=True
in der Methode .split()
übergeben wird.
print(df["Email"].str.split("@", n=-1, expand=True))
Ausgabe:
0 1
0 George Washington
1 Hamza Azeez
2 Harry Walker
Der gesamte Beispielcode ist unten.
# 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)
Ausgabe:
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
Verwandter Artikel - Pandas DataFrame
- Wie man Pandas DataFrame-Spaltenüberschriften als Liste erhält
- Pandas DataFrame-Spalte löschen
- Wie man DataFrame-Spalte in Datetime in Pandas konvertiert
- Wie konvertiert man eine Fließkommazahl in eine Ganzzahl in Pandas DataFrame
- Wie man Pandas-DataFrame nach den Werten einer Spalte sortiert
- Wie erhält man das Aggregat der Pandas gruppenweise und sum