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