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 X 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 X 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