Ricapitolando: per un DataFrame, .shape restituisce una tupla con il numero di righe e colonne. Per una Series, restituisce il numero di righe. Usa .shape per controllare rapidamente la dimensione del tuo dataset o verificare i risultati di filtri e selezioni. Ricorda anche che .shape è un attributo, quindi non servono le parentesi per accedervi.
Per eseguire facilmente da solo tutto il codice di esempio in questo tutorial, puoi creare un quaderno DataLabgratuito con Python preinstallato e che contiene tutti gli esempi di codice.
Se hai un DataFrame e vuoi accedere o selezionare alcune righe/colonne specifiche da quel DataFrame, puoi usare le parentesi quadre o altri metodi avanzati come loc e iloc.
Selezionare colonne usando le parentesi quadre
Supponiamo ora che tu voglia selezionare la colonna country dal DataFrame brics. Per farlo, digiterai brics e poi l'etichetta della colonna tra parentesi quadre.
Selezionare una colonna
country capital area population
BR Brazil Brasilia 8.516 200.40
RU Russia Moscow 17.100 143.50
IN India New Dehli 3.286 1252.00
CH China Beijing 9.597 1357.00
SA South Africa Pretoria 1.221 52.98
brics["country"]
BR Brazil
RU Russia
IN India
CH China
SA South Africa
Name: country, dtype: object
Verificare il tipo dell'oggetto
Controlliamo il tipo dell'oggetto restituito con la funzione type().
type(brics["country"])
pandas.core.series.Series
Come si vede dall'output sopra, qui stiamo lavorando con una serie pandas! Le Series possono essere considerate come array monodimensionali che possono essere etichettati proprio come un DataFrame.
Se vuoi selezionare i dati e mantenerli in un DataFrame, dovrai usare doppie parentesi quadre:
brics[["country"]]
BR Brazil
RU Russia
IN India
CH China
SA South Africa
Se controlliamo il tipo di questo output, è un DataFrame! Anche se con una sola colonna.
type(brics[["country"]])
pandas.core.frame.DataFrame
Capire l'attributo .shape
Ora diamo un'occhiata all'attributo .shape. L'attributo .shape in pandas offre un modo rapido per vedere la struttura di un DataFrame o di una Series. Restituisce una tupla che indica il numero di righe e colonne nel DataFrame o solo il numero di righe in una Series.
Esempio: usare .shape con un DataFrame
Guardiamo di nuovo il nostro DataFrame chiamato brics:
import pandas as pd
# Sample DataFrame
data = {
"country": ["Brazil", "Russia", "India", "China", "South Africa"],
"capital": ["Brasilia", "Moscow", "New Delhi", "Beijing", "Pretoria"],
"area": [8.516, 17.1, 3.286, 9.597, 1.221],
"population": [200.4, 143.5, 1252, 1357, 52.98],
}
brics = pd.DataFrame(data, index=["BR", "RU", "IN", "CH", "SA"])
# Check the shape
print(brics.shape)
Output:
(5, 4)
Questo ci dice che il DataFrame brics ha 5 righe e 4 colonne.
Esempio: usare .shape con una Series
Quando si seleziona una singola colonna dal DataFrame, come la colonna country, il risultato è una Series. Ecco come si comporta .shape in questo caso:
country_series = brics["country"]
print(country_series.shape)
Output:
(5,)
Qui la Series ha 5 righe e nessuna colonna, dato che una Series è monodimensionale.
Selezionare più colonne
Puoi estendere questa chiamata per selezionare due colonne. Proviamo a selezionare country e capital.
brics[["country", "capital"]]
country capital
BR Brazil Brasilia
RU Russia Moscow
IN India New Dehli
CH China Beijing
SA South Africa Pretoria
Se guardi bene, in realtà stai inserendo una lista con le etichette di colonna dentro un altro paio di parentesi quadre e ottieni un sotto-DataFrame che contiene solo le colonne country e capital.
Selezionare righe usando le parentesi quadre
Le parentesi quadre possono fare più che selezionare colonne. Puoi usarle anche per ottenere righe, o osservazioni, da un DataFrame.
Esempio
Puoi selezionare righe con le parentesi quadre solo se specifichi uno slice, come 0:4. Inoltre, qui stai usando gli indici interi delle righe, non le etichette delle righe!
Per ottenere la seconda, terza e quarta riga del DataFrame brics, usiamo lo slice da 1 a 4. Ricorda che la fine dello slice è esclusiva e l'indice parte da zero.
brics[1:4]
country capital area population
RU Russia Moscow 17.100 143.50
IN India New Delhi 3.286 1252.00
CH China Beijing 9.597 1357.00
Queste parentesi quadre funzionano, ma offrono funzionalità limitate. Idealmente, vorremmo qualcosa di simile agli array 2D di Numpy, dove usi comunque le parentesi quadre. L'indice, o lo slice, prima della virgola si riferisce alle righe, e lo slice dopo la virgola si riferisce alle colonne.
Esempio di array 2D Numpy:
my_array[rows, columns]
Se vuoi fare qualcosa di simile con pandas, devi considerare l'uso delle funzioni loc e iloc.
-
loc: basato su etichette -
iloc: basato sulla posizione intera
Funzione loc
loc è una tecnica per selezionare parti dei tuoi dati in base alle etichette. Diamo un'occhiata al DataFrame brics e prendiamo le righe per la Russia.
Per farlo, inserirai l'etichetta di interesse tra parentesi quadre dopo loc.
Selezionare righe
brics.loc["RU"]
country Russia
capital Moscow
area 17.1
population 143.5
Name: RU, dtype: object
Otteniamo una serie pandas contenente tutte le informazioni della riga; scomodo, però, perché è mostrata su linee diverse. Per ottenere un DataFrame, dobbiamo mettere la stringa RU in un altro paio di parentesi. Possiamo anche selezionare più righe contemporaneamente. Supponiamo di voler includere anche India e Cina. Basta aggiungere quelle etichette di riga alla lista.
brics.loc[["RU", "IN", "CH"]]
country capital area population
RU Russia Moscow 17.100 143.50
IN India New Delhi 3.286 1252.00
CH China Beijing 9.597 1357.00
La differenza tra usare loc e le semplici parentesi quadre è che puoi estendere la selezione con una virgola e una specifica delle colonne di interesse.
Selezionare righe e colonne
Estendiamo la chiamata precedente per includere solo le colonne country e capital. Aggiungiamo una virgola e l'elenco delle etichette di colonna che vogliamo mantenere. Viene restituita l'intersezione.
brics.loc[["RU", "IN", "CH"], ["country", "capital"]]
country capital
RU Russia Moscow
IN India New Delhi
CH China Beijing
Puoi anche usare loc per selezionare tutte le righe ma solo un numero specifico di colonne. Sostituisci semplicemente la prima lista che specifica le etichette di riga con i due punti. Uno slice che va dall'inizio alla fine. Questa volta otteniamo indietro tutte le righe ma solo due colonne.
Selezionare tutte le righe e colonne specifiche
brics.loc[:, ["country", "capital"]]
country capital
BR Brazil Brasilia
RU Russia Moscow
IN India New Delhi
CH China Beijing
SA South Africa Pretoria
Funzione iloc
La funzione iloc ti permette di estrarre sottoinsiemi dai DataFrame pandas in base alla loro posizione o indice.
Selezionare righe
Usiamo gli stessi dati ed esempi simili a quelli visti per loc. Iniziamo ottenendo la riga per la Russia.
brics.iloc[[1]]
country capital area population
RU Russia Moscow 17.100 143.50
Per ottenere le righe per Russia, India e Cina, puoi ora usare una lista di indici 1, 2, 3.
brics.iloc[[1, 2, 3]]
country capital area population
RU Russia Moscow 17.100 143.50
IN India New Delhi 3.286 1252.00
CH China Beijing 9.597 1357.00
Selezionare righe e colonne
Come con loc, possiamo selezionare sia righe che colonne usando iloc. Qui selezioneremo le righe per Russia, India e Cina e le colonne country e capital.
brics.iloc[[1, 2, 3], [0, 1]]
country capital
RU Russia Moscow
IN India New Delhi
CH China Beijing
Selezionare tutte le righe e colonne specifiche
Infine, se volessi selezionare tutte le righe ma tenere solo le colonne country e capital, puoi:
brics.loc[:, [0, 1]]
country capital
BR Brazil Brasilia
RU Russia Moscow
IN India New Delhi
CH China Beijing
SA South Africa Pretoria
Le funzioni loc e iloc sono piuttosto simili. L'unica differenza è come fai riferimento a colonne e righe.
Esempio interattivo sulla selezione di un sottoinsieme di dati
Nel seguente esempio, i dati delle auto vengono importati da un file CSV come DataFrame Pandas. Per selezionare solo la cars_per_cap column da cars, puoi usare:
cars['cars_per_cap']
cars[['cars_per_cap']]
La versione con una parentesi quadra restituisce una Series Pandas; quella con doppie parentesi quadre restituisce un DataFrame Pandas.
- Userai una singola parentesi quadra per stampare la colonna
countrydicarscome Series Pandas. - Poi usa le doppie parentesi quadre per stampare la colonna
countrydicarscome DataFrame Pandas. - Infine, usa le doppie parentesi quadre per stampare un DataFrame con entrambe le colonne
countryedrives_rightdicars, in quest'ordine.
# Import cars data
import pandas as pd
cars = pd.read_csv('cars.csv', index_col = 0)
# Print out country column as Pandas Series
print(cars['country'])
# Print out country column as Pandas DataFrame
print(cars[['country']])
# Print out DataFrame with country and drives_right columns
print(cars[['country', 'drives_right']])
Quando eseguiamo il codice sopra, produce il seguente risultato:
US United States
AUS Australia
JPN Japan
IN India
RU Russia
MOR Morocco
EG Egypt
Name: country, dtype: object
country
US United States
AUS Australia
JPN Japan
IN India
RU Russia
MOR Morocco
EG Egypt
country drives_right
US United States True
AUS Australia False
JPN Japan False
IN India False
RU Russia True
MOR Morocco True
EG Egypt True
Per saperne di più su pandas, guarda questo video dal nostro corso Intermediate Python.
Questo contenuto è tratto dal corso Intermediate Python di DataCamp, a cura di Hugo Bowne-Anderson.
Argomenti

