HOWTO · Pandas

Come combinare due colonne di testo in un DataFrame in Pandas

combinare colonne in un DataFrame usando l'operatore '+', i metodi apply(), map(), str.cat() e agg() nella libreria pandas

In questa pagina

Combinare due colonne di testo in un DataFrame Pandas è semplice: somma le due Series con uno spazio tra loro, poi assegna il risultato a una nuova colonna.
In questo modo ogni coppia nome-cognome resta allineata alla sua riga originale.

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

L’esempio produce la colonna Full Name mostrata di seguito. I cinque metodi usano lo stesso input e producono gli stessi valori. Scegli + o Series.str.cat() per la concatenazione diretta di stringhe; usa i metodi per riga quando una funzione di riga rende la trasformazione più facile da esprimere.

Metodo con l’operatore +

Per le colonne di stringhe, + concatena i valori riga per riga. Il separatore è una stringa ordinaria, quindi cambia " " in ", " o in un altro delimitatore in base al formato desiderato. L’operatore supporta anche l’addizione numerica, quindi la sola corrispondenza dei tipi di dati non lo rende un’operazione di concatenazione di testo: usalo qui perché First e Last contengono stringhe.

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)

Il DataFrame risultante è:

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

Metodo Series.map()

Series.map() applica una mappatura a ciascun valore di una Series. Non è una chiamata a DataFrame.map() e convertire con str questi nomi, che sono già stringhe, non è necessario; l’esempio mantiene questa conversione per mostrare come la Series mappata possa essere combinata con un’altra colonna. Per valori misti, decidi esplicitamente come rappresentare i valori mancanti e quelli non stringa prima di convertirli.

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)

Il DataFrame risultante è:

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

Metodo df.apply()

apply può chiamare una funzione una volta per ogni riga quando passi axis=1. Selezionare solo First e Last mantiene Age fuori dall’unione. L’operazione di stringhe join si aspetta che ogni valore selezionato sia una stringa; converti o gestisci deliberatamente i valori mancanti e quelli non stringa prima di usarla su dati meno uniformi. Per un semplice separatore tra due colonne di testo, + o Series.str.cat() è di solito più diretto.

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)

Il DataFrame risultante è:

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

Metodo Series.str.cat()

Series.str.cat() è progettato per concatenare valori di stringa e rende esplicito il separatore con sep. Per impostazione predefinita, un valore mancante in una delle due Series rende mancante il risultato di quella riga. Imposta na_rep quando vuoi un sostituto per i valori mancanti e scegli quel sostituto in modo che si adatti al significato dei tuoi dati.

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)

Il DataFrame risultante è:

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

Metodo df.agg()

Anche agg può applicare un’unione per riga quando gli vengono passati axis=1 e una funzione come " ".join. Come l’esempio con apply, opera sulle due colonne selezionate e si aspetta che i loro valori siano stringhe. Usalo quando l’aggregazione fa già parte della tua elaborazione per riga; per questa semplice operazione, l’operatore + o Series.str.cat() comunica l’intento in modo più diretto. Controlla la colonna Full Name risultante e alcune righe quando adatti il codice ai tuoi dati.

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)

Il DataFrame risultante è:

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