HOWTO · Pandas

Crea una colonna vuota in Pandas DataFrame

Possiamo aggiungere una colonna vuota a DataFrame in Pandas utilizzando semplici metodi di operatore di assegnazione, reindex(), assign() e insert().

In questa pagina

Per aggiungere una colonna vuota a un DataFrame pandas esistente in Python, usa df["NewColumn"] = "" per inserire testo vuoto oppure df["NewColumn"] = float("nan") per i valori mancanti (NaN). Entrambe le opzioni mantengono le righe e le altre colonne. Una stringa vuota è comunque un valore testuale: scegli la rappresentazione più adatta ai calcoli e ai filtri che userai in seguito.

Usa reindex() per aggiungere più colonne, assign() per ottenere un DataFrame con nuove colonne nominate oppure insert() per controllarne la posizione. Gli esempi richiedono pandas e NumPy.

Aggiungere una colonna vuota con l’assegnazione semplice

Assegnando uno scalare a una nuova colonna, il valore viene ripetuto per tutte le righe esistenti. L’assegnazione modifica direttamente df e aggiunge la nuova colonna a destra. Se il nome esiste già, l’assegnazione ne sostituisce i contenuti: per conservare i dati, scegli un nome nuovo.

Questo esempio confronta una stringa vuota, il valore indicante i dati mancanti di NumPy e una Series pandas vuota:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})

df["Empty_1"] = ""
df["Empty_2"] = np.nan
df["Empty_3"] = pd.Series()

print(df)

Output:

       Date  Income  Expenses Empty_1  Empty_2 Empty_3
0  April-20      10         3              NaN     NaN
1  April-21      20         8              NaN     NaN
2  April-22      10         4              NaN     NaN
3  April-23      15         5              NaN     NaN
4  April-24      10         6              NaN     NaN
5  April-25      12        10              NaN     NaN

Empty_1 contiene stringhe vuote, mentre Empty_2 contiene NaN. Quando assegni una Series, pandas allinea le etichette del suo indice con quelle delle righe del DataFrame. La Series vuota non ha etichette corrispondenti, quindi anche Empty_3 contiene valori mancanti in tutte le righe.

Per specificare anche il tipo, puoi usare df["NewColumn"] = pd.Series(index=df.index, dtype="float64"). Includere df.index rende esplicito l’allineamento desiderato. Per selezionare in seguito i valori mancanti, usa df["NewColumn"].isna() invece di confrontare i valori con NaN; per le stringhe vuote serve invece un confronto separato con "".

Aggiungere una colonna vuota con il metodo pandas.DataFrame.reindex()

Il metodo pandas.DataFrame.reindex() restituisce un DataFrame con le etichette e l’ordine delle colonne richiesti. Per impostazione predefinita, alle nuove etichette vengono assegnati valori mancanti. Fai attenzione: columns indica l’intero elenco di colonne del risultato, non soltanto quelle da aggiungere.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})


column_names = ["Empty_1", "Empty_2", "Empty_3"]

df = df.reindex(columns=column_names)
print(df)

Output:

   Empty_1  Empty_2  Empty_3
0      NaN      NaN      NaN
1      NaN      NaN      NaN
2      NaN      NaN      NaN
3      NaN      NaN      NaN
4      NaN      NaN      NaN
5      NaN      NaN      NaN

Il risultato mantiene le sei etichette di riga, ma elimina Date, Income ed Expenses. Se assegni il risultato a df, il riferimento originale viene sostituito.

Per mantenere i dati esistenti, parti da df.columns.tolist() e aggiungi i nuovi nomi. In questo modo conservi l’ordine delle colonne originali e inserisci le nuove a destra. Salva il DataFrame restituito: questo metodo non modifica l’oggetto originale sul posto. Esegui questo esempio:

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})

df = df.reindex(columns=df.columns.tolist() + ["Empty_1", "Empty_2", "Empty_3"])
print(df)

Output:

       Date  Income  Expenses  Empty_1  Empty_2  Empty_3
0  April-20      10         3      NaN      NaN      NaN
1  April-21      20         8      NaN      NaN      NaN
2  April-22      10         4      NaN      NaN      NaN
3  April-23      15         5      NaN      NaN      NaN
4  April-24      10         6      NaN      NaN      NaN
5  April-25      12        10      NaN      NaN      NaN

Le date, le entrate e le spese originali restano presenti, seguite da tre colonne contenenti NaN. Scegli nomi non ancora presenti per evitare di richiedere etichette duplicate.

Aggiungere una colonna vuota a un DataFrame con pandas.DataFrame.assign()

Il metodo pandas.DataFrame.assign() restituisce un DataFrame con una o più colonne nominate. Ogni argomento per parola chiave specifica il nome di una colonna e i relativi valori. Conserva l’oggetto restituito, come in df = df.assign(...), oppure assegnalo a un altro nome per mantenere il DataFrame originale.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})

df = df.assign(Empty_1="", Empty_2=np.nan)
print(df)

Output:

       Date  Income  Expenses Empty_1  Empty_2
0  April-20      10         3              NaN
1  April-21      20         8              NaN
2  April-22      10         4              NaN
3  April-23      15         5              NaN
4  April-24      10         6              NaN
5  April-25      12        10              NaN

Empty_1 contiene stringhe vuote; solo Empty_2 contiene NaN. Le colonne esistenti restano invariate. Come nell’assegnazione diretta, specificare il nome di una colonna esistente ne sostituisce i valori nel DataFrame restituito.

Aggiungere una colonna vuota a un DataFrame con pandas.DataFrame.insert()

Usa pandas.DataFrame.insert() quando la posizione della colonna è importante. La sintassi è df.insert(loc, column, value): loc è la posizione della colonna, a partire da zero; column è la nuova etichetta; value è obbligatorio. Specifica "" per il testo vuoto o np.nan per i valori mancanti.

La posizione deve essere compresa tra 0 e len(df.columns), estremi inclusi; il limite superiore aggiunge la colonna in fondo. Per impostazione predefinita, l’inserimento di un’etichetta già esistente genera un errore. Passando allow_duplicates=True puoi usare un’etichetta duplicata, ma la selezione successiva delle colonne potrebbe risultare ambigua.

A differenza di assign() e reindex(), insert() modifica df sul posto e restituisce None. Non scrivere df = df.insert(...).

L’esempio seguente aggiunge due colonne in fondo:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})
df.insert(3, "Empty_1", "")
df.insert(4, "Empty_2", np.nan)
print(df)

Output:

       Date  Income  Expenses Empty_1  Empty_2
0  April-20      10         3              NaN
1  April-21      20         8              NaN
2  April-22      10         4              NaN
3  April-23      15         5              NaN
4  April-24      10         6              NaN
5  April-25      12        10              NaN

Empty_1 si trova in posizione 3 e contiene stringhe vuote. Dopo questo inserimento, la posizione 4 è disponibile per Empty_2, che contiene NaN. Per inserire invece una colonna all’inizio, usa loc=0: le colonne esistenti si spostano a destra senza cambiare i propri valori.