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