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

Luqman Khan 14 April 2022
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