HOWTO · Pandas

Como combinar duas colunas de texto em um DataFrame no Pandas

combinar colunas em um DataFrame usando o operador '+', os métodos apply(), map(), str.cat() e agg() na biblioteca pandas

Nesta página

Combinar duas colunas de texto em um DataFrame do Pandas é simples: some as duas Series com um espaço entre elas e, em seguida, atribua o resultado a uma nova coluna.
Isso mantém cada par de nome e sobrenome alinhado com sua linha 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

O exemplo produz a coluna Full Name mostrada abaixo. Os cinco métodos usam a mesma entrada e produzem os mesmos valores. Escolha + ou Series.str.cat() para a concatenação direta de strings; use os métodos por linha quando uma função de linha tornar a transformação mais fácil de expressar.

Método do operador +

Para colunas de strings, + concatena os valores linha por linha. O separador é uma string comum, portanto altere " " para ", " ou outro delimitador para corresponder ao formato desejado. O operador também oferece suporte à adição numérica, de modo que a simples correspondência dos tipos de dados não o torna uma operação de concatenação de texto: use-o aqui porque First e Last contêm strings.

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)

O DataFrame resultante é:

     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 um mapeamento a cada valor em uma Series. Não é uma chamada a DataFrame.map(), e converter esses nomes, que já são strings, com str é desnecessário; o exemplo mantém essa conversão para mostrar como a Series mapeada pode ser combinada com outra coluna. Para valores mistos, decida explicitamente como os valores ausentes e os valores que não são strings devem ser representados antes de convertê-los.

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)

O DataFrame resultante é:

     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 pode chamar uma função uma vez para cada linha quando você passa axis=1. Selecionar apenas First e Last mantém Age fora da junção. A operação de strings join espera que cada valor selecionado seja uma string; converta ou trate os valores ausentes e os que não são strings de forma deliberada antes de usá-la em dados menos uniformes. Para um separador simples entre duas colunas de texto, + ou Series.str.cat() costuma ser mais direto.

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)

O DataFrame resultante é:

     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() foi projetado para concatenar valores de string e torna o separador explícito com sep. Por padrão, um valor ausente em qualquer uma das Series faz com que o resultado dessa linha seja ausente. Defina na_rep quando quiser uma substituição para os valores ausentes e escolha essa substituição de acordo com o significado dos seus dados.

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)

O DataFrame resultante é:

     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 também pode aplicar uma junção por linha quando recebe axis=1 e uma função como " ".join. Assim como o exemplo com apply, ele opera sobre as duas colunas selecionadas e espera que seus valores sejam strings. Use-o quando a agregação já fizer parte do seu processamento por linha; para esta tarefa simples, o operador + ou Series.str.cat() comunica a intenção de forma mais direta. Verifique a coluna Full Name resultante e algumas linhas ao adaptar o código aos seus próprios dados.

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)

O DataFrame resultante é:

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds