Divida una sola columna en varias columnas en Pandas DataFrame Column
Pandas tiene un método bien conocido para dividir una columna de cadena o columna de texto por guiones, espacios en blanco y columna de retorno (“Serie”) de listas; si hablamos de pandas, el término Series
se llama la columna Dataframe.
Podemos usar la función pandas Series.str.split()
para dividir cadenas en varias columnas alrededor de un separador o delimitador determinado. Es similar al método split()
de la cadena Python, pero se aplica a toda la columna Dataframe. Tenemos la forma más sencilla de separar la columna debajo de la siguiente.
Este método separa la cadena Series
del índice inicial.
Series.str.split(pat=None, n=-1, expand=False)
Intentemos entender el funcionamiento de este método.
# 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)
Hemos creado un Dataframe df
con tres columnas, Email
, Número
y Ubicación
. Tenga en cuenta que las cadenas de la columna Correo electrónico tienen un patrón específico. Sin embargo, si observa más de cerca, esta columna se puede dividir en dos columnas. Resolveremos muy bien el problema requerido.
Producción :
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
Usaremos la función Series.str.split()
para separar la columna Number
y pasar el -
en el método split()
. Asegúrese de pasar True
a la palabra clave “expandir”.
Ejemplo 1:
print(
"\n\nSplit 'Number' column by '-' into two individual columns :\n",
df.Number.str.split(pat="-", expand=True),
)
Este ejemplo dividirá todos los valores de la serie (Número) por -
.
Producción :
Split 'Number' column into two individual columns :
0 1
0 +44 3844556210
1 +44 2245551219
2 +44 1049956215
Si usamos solo el parámetro de expansión Series.str.split(expand=True)
, esto permitirá dividir los espacios en blanco pero no es posible separarlos con -
y ,
o cualquier expresión regular si existe en la cadena, debe pasar parámetro pat
.
Cambiemos el nombre de estas columnas divididas.
df[["Dialling Code", "Cell-Number"]] = df.Number.str.split("-", expand=True)
print(df)
Creamos dos nuevas series “Código de marcación” y “Número de celular” y asignamos los valores usando la serie “Número”.
Producción :
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
Ejemplo 2:
En este ejemplo, vamos a dividir la serie Ubicación
por ,
.
df[["City", "State"]] = df.Location.str.split(",", expand=True)
print(df)
Divida la serie Ubicación
y almacene sus valores en series individuales Ciudad
y Estado
.
Producción :
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
Veamos el último ejemplo. Separaremos el nombre completo en la serie Email
.
full_name = df.Email.str.split(pat="@", expand=True)
print(full_name)
Producción :
0 1
0 Alex.jhon gmail.com
1 Hamza.Azeez gmail.com
2 Harry.barton hotmail.com
Ahora separamos nombres y apellidos por .
.
df[["First Name", "Last Name"]] = full_name[0].str.split(".", expand=True)
print(df)
Producción :
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
El parámetro n=-1
no funcionará si se pasa expand=True
en el método .split()
.
print(df["Email"].str.split("@", n=-1, expand=True))
Producción :
0 1
0 George Washington
1 Hamza Azeez
2 Harry Walker
El código de ejemplo completo está debajo.
# 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)
Producción :
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
Artículo relacionado - Pandas DataFrame
- 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 convertir un float en un entero en Pandas DataFrame
- Cómo clasificar Pandas DataFrame por los valores de una columna
- Cómo obtener el agregado de Pandas grupo por y suma