Dividir una columna de Pandas DataFrame por un delimitador

Mehvish Ashiq 21 junio 2023
Dividir una columna de Pandas DataFrame por un delimitador

La capacidad de analizar fácilmente los datos proporcionados y crear nuevas columnas que contengan información más específica es valiosa. Uno de esos escenarios es cuando dividimos una columna de marco de datos de Pandas por un delimitador y creamos varias columnas a partir de ella.

Por ejemplo, tenemos una columna que contiene valores separados por un delimitador como A, D, G, y queremos dividir estos valores en varias columnas que contienen A, D y G por separado.

Este tutorial nos enseñará cómo usar el método str.split() para dividir una columna de marco de datos de Pandas por un delimitador.

Dividir una columna de Pandas DataFrame por un delimitador

Antes de pasar a varios ejemplos que demuestran el uso del método str.split(), es importante entender su sintaxis y posibles parámetros.

Sintaxis:

Series.str.split(pat=None, n=-1, expand=False, regex=None)

A continuación se ofrece una breve explicación de los parámetros.

Parámetro Explicación
pat Debe ser un valor de tipo cadena o una expresión regular que se usará como separador para dividir la cadena. El espacio en blanco se utilizará como delimitador/separador si no se especifica.
n Indica el número máximo de divisiones en la salida. Los medios n=-1, n=0 y n=Ninguno devuelven todas las divisiones; por defecto, n se establece en -1.
expand Toma un valor booleano, y si es True, da como resultado un marco de datos que contiene diferentes valores en diferentes columnas; de lo contrario, una serie con una lista de cadenas. De forma predeterminada, expandir se establece en False.
regex (Nuevo en la versión 1.4.0) It accepts a Boolean value that tells if the specified pattern is a regex or not; by default, regex is set to None.
True significa que el patrón especificado es una expresión regular, mientras que False significa una cadena literal. Trata a pat como una cadena literal si se establece en Ninguno y la longitud de pat es 1. Por otro lado, si regex=None y la longitud de pat no es 1, trata a pat como una expresión regular.

Obtendremos un ValueError si pat es la expresión regular compilada y regex se establece en False. Puede leer más sobre eso aquí.

Ahora, pasemos a ejemplos de código para practicarlo.

Divida la columna full_name en varias columnas (first_name y last_name)

Código de ejemplo:

import pandas as pd

df = pd.DataFrame(
    {
        "full_name": [
            "Mehvish Ashiq",
            "Hania Arif",
            "Zobia Shakeel",
            "Tahir Mukhtar",
            "Mazhar Ali",
        ]
    }
)

print("Before Splitting:\n")
print(df)

df[["first_name", "last_name"]] = df["full_name"].str.split(" ", expand=True)
print("\nAfter Splitting:\n")
print(df)

Producción :

Before Splitting:

       full_name
0  Mehvish Ashiq
1     Hania Arif
2  Zobia Shakeel
3  Tahir Mukhtar
4     Mazhar Ali

After Splitting:

       full_name first_name last_name
0  Mehvish Ashiq    Mehvish     Ashiq
1     Hania Arif      Hania      Arif
2  Zobia Shakeel      Zobia   Shakeel
3  Tahir Mukhtar      Tahir   Mukhtar
4     Mazhar Ali     Mazhar       Ali

Podemos ver que un marco de datos en la valla de código anterior contiene una columna (full_name) con nombres y apellidos aleatorios separados por un solo espacio.

Dividimos full_name en dos columnas (first_name y last_name) que contienen el nombre y el apellido por separado. Para hacer esto, usamos el método vectorizado str.split() con expand=True.

Divida la columna full_name en una nueva columna que tenga una lista de valores divididos

Código de ejemplo:

import pandas as pd

df = pd.DataFrame(
    {
        "full_name": [
            "Mehvish Ashiq",
            "Hania Arif",
            "Zobia Shakeel",
            "Tahir Mukhtar",
            "Mazhar Ali",
        ]
    }
)

print("Before Splitting:\n")
print(df)

df["[first_name,last_name]"] = df["full_name"].str.split(" ", expand=False)
print("\nAfter Splitting:\n")
print(df)

Producción :

Before Splitting:

       full_name
0  Mehvish Ashiq
1     Hania Arif
2  Zobia Shakeel
3  Tahir Mukhtar
4     Mazhar Ali

After Splitting:

       full_name [first_name,last_name]
0  Mehvish Ashiq       [Mehvish, Ashiq]
1     Hania Arif          [Hania, Arif]
2  Zobia Shakeel       [Zobia, Shakeel]
3  Tahir Mukhtar       [Tahir, Mukhtar]
4     Mazhar Ali          [Mazhar, Ali]

Esta valla de código es similar a la anterior excepto por una diferencia. Aquí, configuramos expandir en False para crear una columna que contenga una lista de valores divididos.

Divida la columna full_name especificando el número máximo de divisiones

Código de ejemplo:

import pandas as pd

df = pd.DataFrame(
    {
        "full_name": [
            "Mehvish Ashiq Hussain",
            "Hania Arif Ali",
            "Zobia Shakeel Amjad",
            "Tahir Mukhtar Ahmed",
            "Mazhar Ali Azhar",
        ]
    }
)

print("Before Splitting:\n")
print(df)


print("\nAfter Splitting:\n")
print(df["full_name"].str.split(" ", n=1, expand=True))

Producción :

Before Splitting:

               full_name
0  Mehvish Ashiq Hussain
1         Hania Arif Ali
2    Zobia Shakeel Amjad
3    Tahir Mukhtar Ahmed
4       Mazhar Ali Azhar

After Splitting:

         0              1
0  Mehvish  Ashiq Hussain
1    Hania       Arif Ali
2    Zobia  Shakeel Amjad
3    Tahir  Mukhtar Ahmed
4   Mazhar      Ali Azhar

Aquí, establecemos n en 1 para obtener un máximo de una división. En este ejemplo, nos centramos en obtener solo los nombres de pila.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - Pandas DataFrame Column