HOWTO · Pandas
Cómo combinar dos columnas de texto en un DataFrame en Pandas
combinar columnas en un DataFrame usando el operador '+', los métodos apply(), map(), str.cat() y agg() en la biblioteca de pandas
En esta página
Combinar dos columnas de texto en un DataFrame de Pandas es sencillo: suma las dos Series con un espacio entre ellas y luego asigna el resultado a una nueva columna.
Esto mantiene cada par de nombre y apellido alineado con su fila original.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"] + " " + df["Last"]
print(df)
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
El ejemplo produce la columna Full Name que se muestra a continuación. Los cinco métodos usan la misma entrada y producen los mismos valores. Elige + o Series.str.cat() para la concatenación directa de cadenas; usa los métodos por filas cuando una función de fila hace que la transformación sea más fácil de expresar.
Método del operador +
Para las columnas de cadenas, + concatena los valores fila por fila. El separador es una cadena ordinaria, así que cambia " " por ", " u otro delimitador para que coincida con el formato deseado. El operador también admite la suma numérica, por lo que el hecho de que los tipos de datos coincidan no lo convierte por sí solo en una operación de concatenación de texto: úsalo aquí porque First y Last contienen cadenas.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"] + " " + df["Last"]
print(df)
El DataFrame resultante es:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
Método Series.map()
Series.map() aplica una asignación a cada valor de una Series. No es una llamada a DataFrame.map(), y convertir estos nombres, que ya son cadenas, con str es innecesario; el ejemplo conserva esa conversión para mostrar cómo la Series asignada puede combinarse con otra columna. En el caso de valores mixtos, decide explícitamente cómo deben representarse los valores ausentes y los valores que no son cadenas antes de convertirlos.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"].map(str) + " " + df["Last"]
print(df)
El DataFrame resultante es:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
Método df.apply()
apply puede llamar a una función una vez por cada fila cuando pasas axis=1. Seleccionar solo First y Last mantiene Age fuera de la unión. La operación de cadenas join espera que cada valor seleccionado sea una cadena; convierte o trata los valores ausentes y los que no son cadenas de forma deliberada antes de usarla en datos menos uniformes. Para un separador simple entre dos columnas de texto, + o Series.str.cat() suele ser más directo.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df[["First", "Last"]].apply(" ".join, axis=1)
print(df)
El DataFrame resultante es:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
Método Series.str.cat()
Series.str.cat() está diseñado para concatenar valores de cadena y hace explícito el separador con sep. De forma predeterminada, un valor ausente en cualquiera de las dos Series hace que el resultado de esa fila sea ausente. Establece na_rep cuando quieras un reemplazo para los valores ausentes, y elige ese reemplazo de acuerdo con el significado de tus datos.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"].str.cat(df["Last"], sep=" ")
print(df)
El DataFrame resultante es:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
Método df.agg()
agg también puede aplicar una unión por filas cuando se le pasa axis=1 y una función como " ".join. Al igual que el ejemplo de apply, opera sobre las dos columnas seleccionadas y espera que sus valores sean cadenas. Úsalo cuando la agregación ya forme parte de tu procesamiento por filas; para esta tarea sencilla, el operador + o Series.str.cat() comunica la intención de forma más directa. Comprueba la columna Full Name resultante y algunas filas cuando adaptes el código a tus propios datos.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df[["First", "Last"]].agg(" ".join, axis=1)
print(df)
El DataFrame resultante es:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds