Seleziona le righe di Panda in base all'indice dell'elenco


105

Ho un dataframe df:

   20060930  10.103       NaN     10.103   7.981
   20061231  15.915       NaN     15.915  12.686
   20070331   3.196       NaN      3.196   2.710
   20070630   7.907       NaN      7.907   6.459

Quindi voglio selezionare le righe con determinati numeri di sequenza indicati in un elenco, supponiamo che qui sia [1,3], quindi a sinistra:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

Come o quale funzione può farlo?

Risposte:


130
List = [1, 3]
df.ix[List]

dovrebbe fare il trucco! Quando indicizzo con frame di dati, utilizzo sempre il metodo .ix (). È molto più facile e flessibile ...

UPDATE Questo non è più il metodo accettato per l'indicizzazione. Il ixmetodo è deprecato. Utilizzare .ilocper l'indicizzazione basata su numeri interi e .locper l'indicizzazione basata su etichette.


14
Questo è ora deprecato, .iloc dovrebbe essere usato per l'indicizzazione posizionale
t_warsop

86

puoi anche usare iloc:

df.iloc[[1,3],:]

Questo non funzionerà se gli indici nel tuo dataframe non corrispondono all'ordine delle righe a causa di calcoli precedenti. In tal caso, utilizzare:

df.index.isin([1,3])

... come suggerito in altre risposte.


61

Un altro modo (sebbene sia un codice più lungo) ma è più veloce dei codici sopra. Controllalo usando la funzione% timeit:

df[df.index.isin([1,3])]

PS: hai capito il motivo

inserisci qui la descrizione dell'immagine


1
utilizzare df.index.get_level_values(0).isinper multiindice
CiaranWelsh

4

Per set di dati di grandi dimensioni, è efficiente in termini di memoria leggere solo le righe selezionate tramite il skiprowsparametro.

Esempio

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

Questo ora restituirà un DataFrame da un file che salta tutte le righe tranne 1 e 3.


Dettagli

Dai documenti :

skiprows : tipo elenco o intero o richiamabile, predefinito None

...

Se richiamabile, la funzione richiamabile verrà valutata rispetto agli indici di riga, restituendo True se la riga deve essere ignorata e False in caso contrario. Un esempio di un argomento richiamabile valido sarebbelambda x: x in [0, 2]

Questa funzione funziona nella versione panda 0.20.0+. Vedi anche il problema corrispondente e un post correlato .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.