2.3.3 - I/O in Pandas¶
Lettura di dati da sorgenti eterogenee¶
Nel nostro primo esempio abbiamo usato la funzione read_csv
per creare un dataframe partendo dai dati memorizzati in un file in formato CSV. Tuttavia, Pandas supporta molti altri formati.
Ad esempio, potremmo provare a leggere un file Excel:
Attenzione
Per leggere (e scrivere) da (su) Excel è necessario installare la libreria openpyxl
(pip install openpyxl
).
In alternativa, può essere letto un file in formato JSON, oppure ancora direttamente un database:
Esiste un elenco completo delle (numerose) funzioni disponibili, che possono essere individuate sulla reference. In generale, comunque, la sintassi è sempre read_*(data_source)
, con *
da sostituire con il tipo di sorgente dati (csv
, excel
, etc.).
Scrittura di dati su destinazioni eterogenee¶
Possiamo anche scrivere un dataframe su file mediante le funzioni duali alle read_
, che usano il suffisso to_
seguito dall'estensione del file destinazione. Ad esempio, potremmo scrivere un file CSV con il metodo to_csv
:
Aggiunta di feature e dati¶
Immaginiamo adesso di voler aggiungere una nuova feature ad un dataframe già esistente. Per farlo, iniziamo creando un dataframe da zero:
Possiamo aggiungere una nuova colonna semplicemente usando l'operatore di assegnazione e specificandone il nome:
Possiamo poi inserire nuovi campioni in coda al dataframe. Per farlo, dovremo prima creare un nuovo dataframe dalle dimensioni coerenti con quello già esistente, e poi usare la funzione concat()
:
>>> df_add = pd.DataFrame([[6,7]], columns=['one', 'two'])
>>> df = pd.concat([df, df_add])
one two
0 1 2
1 2 4
2 3 6
3 4 8
4 5 10
0 6 7
Notiamo che la funzione concat()
accetta, tra gli altri, il parametro axis
. Se questo è uguale a zero (come lo è di default), la concat()
effettua la concatenazione per righe; se è pari ad 1, invece, la concatenazione avviene per colonne. Tuttavia, è importante sottolineare come la concatenazione avvenga anche nel caso le misure non siano completamente coerenti: infatti, se provassimo ad effettuare una concatenazione per colonne, avremmo un risultato del tipo:
>>> pd.concat([df, df_add], axis=1)
one two one two
0 1 2 6.0 7.0
1 2 4 NaN NaN
2 3 6 NaN NaN
3 4 8 NaN NaN
4 5 10 NaN NaN
I valori relativi alle righe con indice che va da 1 a 4, che ovviamente non saranno presenti, saranno automaticamente impostati a NaN, acronimo di Not a Number.