Python - La libreria pandas - Introduzione

pandas logo

La libreria pandas, come viene spiegato nella sua pagina ufficiale, fornisce strutture e strumenti per l'analisi di dati in linguaggio Python.

Con questo articolo voglio solo presentarvi le feature più ovvie e banali della libreria, così che possiate prenderne in considerazione l'utilizzo in futuro.

Qui vi elenco le funzioni pandas che andremo a vedere in questa introduzione:

  • read_csv()
  • read_excel()
  • read_table()
  • to_csv()
  • append()
  • fillna()
  • corr()
  • describe()

    Installazione

    Per l'installazione sotto Linux, se non avete installato il pacchetto Anaconda come consigliato nel precedente articolo su Python, potete utilizzare il comando pip install come spiegato di seguito:

    sudo apt-get install python-pip
    sudo pip install numpy
    sudo pip install pandas
    

    Se il comando pip non dovesse funzionare, vi consiglio di spulciare questa pagina.

    Al termine dell'installazione, o se avete già il pacchetto Anaconda, digitate python o ipython sul vostro terminale e controllate che il seguente comando non vi dia errore:

    import pandas
    

    Creare un DataFrame

    Se tutto è filato liscio fino a qui, possiamo continuare. Il cuore della libreria sono gli oggetti DataFrame, strutture dati 2D indicizzati sia sulle colonne che sulle righe
    E' possibile creare un oggetto DataFrame a partire da zero utilizzando i metodi della libreria numpy:

    import pandas as pd
    import numpy as np
    
    rows = np.arange(3,9)
    cols = list('ABCDF')
    
    df = pd.DataFrame(np.random.randn(6,5),index=rows,columns=cols)
    print df
    

    Dal print dell'oggetto possiamo notare due cose: la prima è che potete tranquillamente pensare un oggetto della classe DataFrame esattamente come una tabella SQL; la seconda è che gli indici delle righe e delle colonne possono essere sostanzialmente qualsiasi cosa. In questo esempio infatti le righe sono indicizzate con numeri che vanno dal 3 all'8.
    Se volete adesso fare riferimento ad una singola colonna vi basterà utilizzare un'istruzione del tipo:

    column_labelB = df['B']
    

    se volete invece fare riferimento a specifiche righe della tabella l'istruzione diventa:

    rows_label45 = df.loc[4:5]
    

    con il metodo loc sono utilizzate le etichette delle righe; se intendete estrarre righe a seconda della loro posizione nella tabella, l'istruzione diventa:

    rows_index13 = df.iloc[1:3]
    

    Se provate a fare un print di rows_label45 e rows_index13 vedete che il risultato sarà lo stesso.

    Caricare una tabella

    La libreria vi permette di caricare un file .csv all'interno di un oggetto DataFrame con la seguente istruzione:

    import pandas as pd
    df = pd.read_csv('table.csv')
    

    A questo punto potete visualizzare, affettare e filtrare il contenuto del file .csv semplicemente utilizzando i metodi e le istruzioni messe a disposizioni dalla libreria.
    Visitate la pagina della documentazione del metodo per la lista completa dei parametri che potete aggiungere al path del file. Menzione speciale per il parametro sep che vi permette di scegliere il tipo di separatore da utilizzare per il parsing del file, e per il parametro dtype che vi permette di specificare il tipo delle colonne da caricate nel DataFrame.

    import pandas as pd
    df = pd.read_csv('table.csv', sep=';', dtype={'ID': str}) 
    # ipotizzando che in 'table.csv' esista un campo 'ID' che deve essere letto come una stringa
    

    Allo stesso modo potete caricare il contenuto di un file Excel all'interno di un oggetto DataFrame con read_excel(). Ricordatevi sempre di ricontrollare le intestazioni degli oggetti DataFrame creati in questo modo, così da essere certi che il caricamento sia andato a buon fine. Per stampare l'intestazione di un oggetto DataFrame df vi basterà digitare:

    print list(df)
    

    Il risultato di questa operazione è la lista delle etichette delle colonne.

    Ricordatevi anche di controllare sempre prima il separatore decimale dei floating point utilizzato nei file. Se fosse diverso dal punto, utilizzate il parametro decimal per leggere correttamente il file.

    Se poi avete un file di testo generico, formattato coerentemente con un separatore delle colonne, potete utilizzare la funzione generica read_table().

    Aggiungere/modificare righe

    Ora che avete caricato o creato il vostro oggetto DataFrame, potete modificare una cella della tabella semplicemente facendole riferimento in uno dei modi mostrati nel seguito:

    import pandas as pd
    import numpy as np
    
    rows = np.arange(3,9)
    cols = list('ABCDF')
    
    df = pd.DataFrame(np.random.randn(6,5),index=rows,columns=cols)
    print df
    
    
    # modifichiamo la cella alla posizione riga '6' colonna 'B'
    df.loc[6]['B'] = 9999
    
    # modifichiamo la cella alla posizione riga '3' (prima riga) colonna 'C'
    df.iloc[0]['C'] = 9999
    
    print df
    
    

    Potete anche impilare due DataFrame con il metodo append:

    import pandas as pd
    import numpy as np
    
    rows = np.arange(3,9)
    cols = list('ABCDF')
    
    df1 = pd.DataFrame(np.random.randn(6,5),index=rows,columns=cols)
    df2 = pd.DataFrame(np.random.randn(6,5),index=rows,columns=cols)
    
    df = df1.append(df2,ignore_index=True)
    print df
    
    

    Il parametro ignore_index impostato a True fa in modo che il nuovo DataFrame abbia dei nuovi indici per le righe e non usi quelli di df1 e df2.

    Se i due DataFrame non sono consistenti con le colonne, il metodo append() aggiungerà NaN nelle colonne non presenti in entrambi i DataFrame.

    Se volete sostituire i NaN con degli 0, vi basterà digitare:

    df.fillna(0,inplace=True) 
    

    Rapida analisi di un DataFrame

    Per ottenere informazioni statistiche rapide sul DataFrame appena creato, esistono due funzioni molto interessanti: corr che restituisce la matrice di correlazione di tutte le colonne numeriche del DataFrame, e describe che restituisce informazioni statistiche come media, mediana, minimo, massimo, varianza e altre, per ogni colonna numerica del DataFrame.

    import pandas as pd
    import numpy as np
    
    rows = np.arange(3,9)
    cols = list('ABCDF')
    
    print df.corr()
    print
    print df.describe()
    print
    print df.describe(percentiles=[0.25,0.75])
    # con il parametro 'percentiles' potete aggiungere altre informazioni sui percentili da mostrare
    
    

    Salvare una tabella in un file .csv

    Ora che avete manipolato a vostro piacimento il DataFrame df, potete utilizzare la funzione to_csv() per salvare il risultato in un file .csv:

    df.to_csv('table.csv', sep=';', decimal=',', index=False) 
    

    Come spiegato in precedenza, il parametro decimal serve a specificare il simbolo che sarà utilizzato per dividere i decimali nelle colonne float della tabella. Il mio consiglio è che se dovete passare la tabella ad amici che non hanno confidenza con Excel, ricordatevi di impostare decimal=',', cosicchè ci siano meno possibilità di avere una visualizzazione errata della tabella su Excel. Ricordatevi però di aggiungere il parametro quando dovete riaprire la tabella con pandas:

    df = pd.read_csv('table.csv', sep=';', decimal=',') 
    

    Il parametro index se impostato a False fa in modo che non sia aggiunta la colonna degli indici nel file .csv; di default è impostato a True.

    Nel prossimo tutorial dedicato alla libreria pandas, vedremo come manipolare i DataFrame in maniera simile al linguaggio SQL.

  • Alessio Antonielli

    Ingegnere informatico, appassionato di cinema, musica, videogiochi e serie tv. Insomma, le solite cose che vi aspettereste da un ex studente di Ingegneria Informatica, giusto per rafforzare lo stereotipo…

    Python - La libreria pandas - Introduzione ultima modifica: 2016-01-26T12:00:12+00:00 da Alessio Antonielli


    Advertisment ad adsense adlogger