HOWTO · Pandas
Teilen Sie eine einzelne Spalte in mehrere Spalten in Pandas DataFrame Column auf
In diesem Tutorial lernen wir, wie man die pandas Dataframe-Spalte mit der pandas .split() -Methode in zwei Spalten aufteilt, und in diesem Artikel werden wir Python-Tipps und -Tricks auf effiziente Weise sehen.
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