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.
Artículo relacionado - Pandas DataFrame Column
- Cómo obtener las cabeceras de columna de Pandas DataFrame como una lista
- Cómo borrar la columna de Pandas DataFrame
- Cómo convertir la columna del DataFrame a Datetime en Pandas
- Cómo obtener la suma de la columna de Pandas
- Cómo cambiar el orden de las columnas Pandas DataFrame
- Cómo convertir la columna del DataFrame en cadena en los pandas