Computer 4 dummy

Informatica facile a portata di tutti

Pandas – Accesso ai dati

In questo capitolo vediamo come accedere ai dati importati utilizzando Pandas e cerchiamo di distinguere i tipi di dati e le relative modalità per utilizzarli.
L’indice di questa guida è disponibile a questo link: https://computer4dummy.altervista.org/programmazione-guide-alla-programmazione/python-data-analisi/panda-per-python/

Accesso ai dati

Supponiamo di vole accedere al valore contenuto nella prima colonna della prima riga, da quello che abbiamo visto nei capitoli precedenti si dovrebbe riuscire facendo il comando X[0,0], ma invece…

X[0,0]
Traceback (most recent call last):

  File "<ipython-input-4-091b00d411fa>", line 1, in <module>
    X[0,0]

  File "C:\Users\alanl\Anaconda2\lib\site-packages\pandas\core\frame.py", line 2139, in __getitem__
    return self._getitem_column(key)

  File "C:\Users\alanl\Anaconda2\lib\site-packages\pandas\core\frame.py", line 2146, in _getitem_column
    return self._get_item_cache(key)

  File "C:\Users\alanl\Anaconda2\lib\site-packages\pandas\core\generic.py", line 1842, in _get_item_cache
    values = self._data.get(item)

  File "C:\Users\alanl\Anaconda2\lib\site-packages\pandas\core\internals.py", line 3843, in get
    loc = self.items.get_loc(item)

  File "C:\Users\alanl\Anaconda2\lib\site-packages\pandas\core\indexes\base.py", line 2527, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))

  File "pandas/_libs/index.pyx", line 117, in pandas._libs.index.IndexEngine.get_loc

  File "pandas/_libs/index.pyx", line 141, in pandas._libs.index.IndexEngine.get_loc

KeyError: (0, 0)

Il risultato è un errore, perché si sta cercando di accedere ad un data-frame come se si trattasse di una matrice, l’unica possibilità è dunque convertire X in una matrice.

Conversione in una matrice

Per convertire in una matrice M si usa il comando: as_matrix()

M = X.as_matrix()

ora vediamo la differenza tra i tipi di dati:

type(X)
Out[6]: pandas.core.frame.DataFrame

type(M)
Out[7]: numpy.ndarray

DataFrame & Array

Proviamo a passare alla variabile solo “0”. Quindi X[0]

X[0]
Out[8]: 
0     17.930201
1     97.144697
2     81.775901
3     55.854342
4     49.366550
5      3.192702
6     49.200784
7     21.882804
...   ...
95    46.456779
96    77.130301
97    68.600608
98    41.693887
99     4.142669
Name: 0, Length: 100, dtype: float64

Vediamo ora che è stato visualizzato il contenuto dell’intera prima colonna nominata appunto 0.
Come si è visto precedentemente i primi valori corrispondono ai valori che abbiamo visualizzato con il comando head() corrispondenti alla prima colonna che aveva “0” come intestazione o titolo della colonna.

Nel capitolo dove parlavamo di Numpy quando ci riferivamo ad X[0] si intendeva la prima riga dell’array mentre ora utilizzando Pandas quando usiamo X[0] ci riferiamo ai dati della prima colonna

NUMPY: X[0] = prima riga

PANDAS: X[0] = Colonna con intestazione “0”

Per capire meglio la funzione type() ci viene in aiuto per capire meglio la tipologia di dati a cui facciamo riferimento con X[0]

type(X[0])
Out[8]: pandas.core.series.Series

Valori in riga ( iloc[] )

Quindi per poter accedere ai valori contenuti nella prima riga dell’array abbiamo a disposizione la funzione iloc[] .

X.iloc[0]
Out[9]: 
0     17.930201
1     94.520592
2    320.259530
Name: 0, dtype: float64

La funzione ix[0] esegue allo stesso modo la selezione dei dati della prima riga ma in questo momento questa funzione è andata in disuso: http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated

Ora per vedere come sono considerati i dati estratti con la funzione iloc[] usiamo sempre type()

type(X.iloc[0])
Out[13]: pandas.core.series.Series

Come selezionare i dati

Ora vediamo come possiamo selezionare più di una colonna; per esempio possiamo visualizzare il contenuto della prima e della terza colonna (quindi con indici 0 e 2).

X[[0,2]]
Out[14]: 
            0           2
0   17.930201  320.259530
1   97.144697  404.634472
2   81.775901  181.485108
3   55.854342  321.773638
4   49.366550  322.465486
5    3.192702   94.618811
.   ...        ...
95  46.456779  336.876154
96  77.130301  438.460586
97  68.600608  355.900287
98  41.693887  284.834637
99   4.142669  168.034401

[100 rows x 2 columns]

Se ora volessimo visualizzare solo le righe che hanno nella prima colonna i valori inferiori a 5 possiamo ottenere i dati in questo modo:

X[X[0]<5]
Out[15]: 
           0          1           2
5   3.192702  29.256299   94.618811
44  3.593966  96.252217  293.237183
54  4.593463  46.335932  145.818745
90  1.382983  84.944087  252.905653
99  4.142669  52.254726  168.034401

Questa sintassi ci indica di visualizzare i dati del DataFrame X che hanno la prima colonna ( X[0] ) con valore inferiore a 5, se invece scrivessimo solo X[0]<5 otterremo solo la lista per ogni valore della prima colonna con vero se inferiore a 5 altrimenti falso.

X[0]<5
Out[16]: 
0     False
1     False
2     False
3     False
4     False
5      True
..    ...
95    False
96    False
97    False
98    False
99     True
Name: 0, Length: 100, dtype: bool

Anche questa è una serie di dati:

type(X[0]<5)
Out[17]: pandas.core.series.Series