LOC vs ILOC nei panda: differenza tra LOC e ILOC nei panda
Pubblicato: 2020-08-01Sommario
Loc e iloc in Panda
Una causa comune di confusione tra i nuovi sviluppatori Python è loc vs. iloc. Entrambi sembrano molto simili e svolgono compiti simili. Quindi questo può confondere qualsiasi studente.
Se vuoi scoprire la differenza tra iloc e loc, sei nel posto giusto, perché in questo articolo tratteremo questo argomento in dettaglio. Scoprirai qual è la differenza fondamentale tra queste funzioni e poi le vedrai in azione per comprendere meglio il concetto. Dai un'occhiata ai nostri corsi di scienza dei dati per saperne di più sui Panda.
Iniziamo.
Differenza tra loc e iloc
1. iloc in Python
Puoi usare iloc in Python per la selezione. È basato sulla posizione intera e ti aiuta a selezionare in base alla posizione. Quindi, se vuoi trovare la riga con l'indice 5, iloc ti mostrerà la quinta riga del frame di dati indipendentemente dal suo nome o etichetta.
Ecco un esempio di iloc in Python:
>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
… {'a': 100, 'b': 200, 'c': 300, 'd': 400},
… {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> df
abc
0 1 2 3 4
1 100 200 300 400
2 1000 2000 3000 4000
Indicizzeremo le righe con un intero scalare usando la funzione iloc per il dataframe sopra:
>>> digita(df.iloc[0])
<classe 'pandas.core.series.Series'>
>>> df.iloc[0]
un 1
b 2
c 3
d 4
Nome: 0, tipo d: int64
2. loc in Panda
Puoi usare loc in Pandas per accedere a più righe e colonne usando le etichette; tuttavia, puoi usarlo anche con un array booleano.
Se usi loc per trovare una riga con indice 5, non otterrai la quinta riga con essa. Invece, otterrai solo la riga che ha il nome "5".
Ecco un esempio di loc in Pandas:
>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
… index=['cobra', 'viper', 'sidewinder'],
… colonne=['max_speed', 'shield'])
>>> df
scudo velocità max
cobra 1 2
vipera 4 5
sidewinder 7 8
Quella sopra era la tabella da cui estrarremo la riga:
>>> df.loc['viper']
velocità_max 4
scudo 5
Nome: vipera, dtype: int64
Esempio dettagliato per loc vs iloc
Anche se utilizziamo entrambe queste funzioni per la selezione, sarebbe meglio se discutessimo un esempio dettagliato per comprenderne le distinzioni.
Nel nostro esempio, utilizzeremo il set di dati del cliente telco, disponibile su kaggle. Lo aggiungeremo a un frame di dati:
df = pd.read_csv("Progetti/previsione_abbandono/Telco-cliente-abbandono.csv")
df.head ()
ID | Genere | Suor Cittadina | Compagno | Dipendenti | mandato | Telefono | MultipleLines | Internet | Sicurezza | |
0 | 7590-VHVEG | Femmina | 0 | sì | No | 1 | No | Nessun telefono | ADSL | No |
1 | 5575-GNVDE | Maschio | 0 | No | No | 34 | sì | No | ADSL | sì |
2 | 3668-QPYBK | Maschio | 0 | No | No | 2 | sì | No | ADSL | sì |
Questo set di dati ha 21 colonne; ne abbiamo mostrati solo alcuni a scopo dimostrativo. Come abbiamo già discusso, utilizziamo loc per selezionare i dati in base all'etichetta. Qui, i nomi delle colonne sono le loro etichette di colonna, come sesso, possesso, OnlineSecurity; sono tutti i nomi delle colonne e le etichette.
Poiché non abbiamo assegnato alcun indice specifico, i panda creerebbero un indice intero per le righe per impostazione predefinita. Le etichette di riga sono numeri interi, che iniziano da 0 e salgono. In questo esempio, vedremo come loc e iloc si comportano in modo diverso.
- Seleziona la riga "1" e la colonna "Partner"
df.loc[1, 'Partner']
Uscita: 'No'
Mostra il valore presente nella colonna 'Partner' della riga '1'.
- Seleziona le etichette di riga "4" e le colonne "ID cliente" e "sesso"
df.loc[:4, ['ID cliente', 'sesso']]
identificativo del cliente | Genere | |
0 | 7590-VHVEG | Femmina |
1 | 5575-GNVDE | Maschio |
2 | 3668-QPYBK | Maschio |
3 | 7795-CFOCW | Maschio |
4 | 9237-HQITU | Femmina |
- Seleziona le etichette di riga "1", "2", "3" e la colonna "Dipendenti".
df.loc[[1,2,3], 'Dipendenti']
1 n
2 n
3 n
Nome: Dipendenti, dtype: oggetto
Questa volta, filtreremo il dataframe e applicheremo iloc o loc:
- Seleziona le etichette di riga su "10" e le colonne "PhoneService" e "InternetService" di un cliente che ha un partner (il partner deve essere "sì")
df [df.Partner == 'Sì'].loc:10, ['Servizio Telefono', 'Servizio Internet']]
Nel caso precedente, abbiamo applicato un filtro al database ma non abbiamo modificato l'indice, quindi il nostro output ha omesso più etichette delle righe richieste dal filtro. Quindi, usando loc[:10] qui, abbiamo selezionato le righe con etichette fino a "10".
Se, d'altra parte, utilizziamo iloc qui e applichiamo il filtro, otterremo 10 righe poiché iloc seleziona per posizione indipendentemente dalle etichette. Ecco il risultato che otterremo se applichiamo iloc[:10]:

df[df.Partner == 'Sì'].iloc[:10, [6,8]]
Servizio telefonico | Servizio internet | |
0 | No | ADSL |
8 | sì | Fibra ottica |
10 | sì | ADSL |
12 | sì | Fibra ottica |
15 | sì | Fibra ottica |
18 | sì | ADSL |
21 | sì | No |
23 | sì | ADSL |
24 | sì | ADSL |
26 | sì | Fibra ottica |
Devi aver notato che dobbiamo cambiare il nostro metodo per selezionare le colonne.
Leggi: Tutorial Python Pandas
- Seleziona le prime 5 colonne e le prime 5 righe con iloc
df.iloc[:4, :4]
identificativo del cliente | Genere | Cittadino anziano | Compagno | |
0 | 7590-VHVEG | Femmina | 0 | sì |
1 | 5575-GNVDE | Maschio | 0 | No |
2 | 3668-QPYBK | Maschio | 0 | No |
3 | 7795-CFOCW | Maschio | 0 | No |
Possiamo usare iloc per selezionare le posizioni dalla fine. Per questo, dovremo semplicemente usare numeri interi negativi (-1, -2, ecc.) E iniziare con loro.
- Seleziona le ultime 5 colonne e le ultime 5 righe
df.iloc[-5:, -5:]
Fatturazione senza carta | Metodo di pagamento | Spese mensili | Spese totali | Zangola | |
7038 | sì | Assegno inviato | 84.80 | 1990.5 | No |
7039 | sì | Carta di credito | 103.20 | 7362.9 | No |
7040 | sì | Assegno elettronico | 29.60 | 346.45 | No |
7041 | sì | Assegno spedito | 74.40 | 306.6 | sì |
7042 | sì | Trasferimento bancario | 105.65 | 6844.5 | No |
Puoi usare la funzione lambda anche con iloc. (Una funzione lambda è una piccola funzione anonima in Python che può avere una singola espressione ma un numero qualsiasi di argomenti)
- Seleziona ogni terza riga fino alla 15a e mostra solo le colonne "servizio Internet" e "Partner".
df.iloc[ lambda x: (x.index x 3 == 0) & (x.index <= 150]['Partner', 'InternetService' ]]
Compagno | Servizio internet | |
0 | sì | ADSL |
3 | No | ADSL |
6 | No | Fibra ottica |
9 | No | ADSL |
12 | sì | Fibra ottica |
15 | sì | Fibra ottica |
Possiamo anche selezionare etichette o posizioni intermedie.
- Seleziona le posizioni delle colonne tra 4 e 6 e le posizioni delle righe tra 20 e 25
df.iloc[20:25, 4:6]
Dipendenti | mandato | |
20 | No | 1 |
21 | No | 12 |
22 | No | 1 |
23 | No | 58 |
24 | No | 49 |
Ora, se provi a passare le etichette a iloc, Pandas ti mostrerà il seguente messaggio di errore:
ValueError: l'indicizzazione basata sulla posizione può avere solo [integer, integer slice (il punto START è INCLUSO, il punto END è ESCLUSO), listlike di interi, array booleano] tipi
Riceverai un errore simile se passi le posizioni a loc.
Leggi anche: Domande sull'intervista ai panda
Ulteriori informazioni su Python
Uno studente deve porre domande e trovare le risposte. Ci auguriamo che questo articolo abbia risposto alle tue domande su loc in Pandas (o iloc in Python). Sarebbe meglio se provassi tu stesso queste funzioni su diversi set di dati per capire come funzionano.
Se vuoi saperne di più su Python, Panda e argomenti rilevanti, dovresti visitare il nostro blog. I nostri esperti aggiungono più risorse dettagliate lì.
Se sei curioso di conoscere la scienza dei dati, dai un'occhiata al programma Executive PG in Data Science di IIIT-B e upGrad, creato per i professionisti che lavorano e offre oltre 10 casi di studio e progetti, workshop pratici pratici, tutoraggio con esperti del settore, 1 -on-1 con mentori del settore, oltre 400 ore di apprendimento e assistenza al lavoro con le migliori aziende.
Come possiamo aggiungere righe di Pandas DataFrame?
Per inserire righe nel DataFrame, possiamo usare i comandi loc, iloc e ix.
1. La loc viene utilizzata principalmente per le etichette del nostro indice. Può essere inteso come quando inseriamo in loc 4, che indica che stiamo cercando voci DataFrame con indice 4.
2. Iloc viene utilizzato principalmente per trovare posizioni nell'indice. È come se inserissimo iloc 4, che indica che stiamo cercando voci DataFrame presenti nell'indice 4.
3. Il caso ix è complicato perché passiamo un'etichetta a ix se l'indice è a base intera. L'ix 4 indica che stiamo cercando nel DataFrame valori con un indice di 4.
Che cos'è la reindicizzazione nel contesto di Pandas in Python?
Le etichette di riga e colonna di un DataFrame vengono modificate quando lo reindicizziamo. Il termine "reindex" si riferisce al processo di allineamento dei dati a un insieme specifico di etichette lungo un singolo asse. In Panda, la reindicizzazione può essere utilizzata per modificare l'indice delle righe e delle colonne di un DataFrame. Molte strutture di dati di indice collegate a molte serie di panda o DataFrame di panda possono essere utilizzate con gli indici.
Quali sono alcune operazioni sui dati in Panda?
Esistono diverse importanti operazioni sui dati per DataFrame in Pandas, che sono le seguenti:
1. Selezione di righe e colonne - Passando i nomi delle righe e delle colonne, possiamo selezionare qualsiasi riga e colonna nel DataFrame. Diventa unidimensionale e viene considerata come una serie quando la selezioni dal DataFrame.
2. Filtraggio dei dati - Utilizzando alcune delle espressioni booleane in DataFrame, possiamo filtrare i dati.
3. Valori Null - Quando non vengono forniti dati agli articoli, ricevono un valore Null. Non possono esserci valori nelle diverse colonne, che sono generalmente rappresentate come NaN.