2012-07-23 19 views
9

Non riesco a trovare un modo elegante per index a pandas.DataFrame da un indice intero. Nell'esempio seguente voglio ottenere il valore 'a' dal primo elemento della colonna 'A'.Indicizzazione di un dataframe panda per intero

import pandas 
df = pandas.DataFrame(
    {'A':['a','b', 'c'], 'B':['f', 'g', 'h']}, 
    index=[10,20,30] 
    ) 

mi aspetterei df['A'].ix[0] e df['A'][10] sia per tornare 'a'. Il df['A'][10] restituisce 'a', ma df['A'].ix[0] genera un KeyError: 0. L'unico modo in cui potrei pensare di ottenere il valore 'a' in base all'indice 0 è di utilizzare il seguente approccio.

df['A'][df['A'].index[0]] 

C'è un modo più breve per ottenere 'a' dalla dataframe, utilizzando l'indice 0?

Aggiornamento

Come di panda 0,11 c'è un altro modo per index by integer.

df.iloc[0] # integer based, gives the first row 
df.loc[10] # label based, gives the row with label 10 

Questa supersedes l'approccio irow.

risposta

12

Si ottiene un errore con df['A'].ix[0] perché l'indicizzazione non inizia a 0, è dalle ore 10. È possibile ottenere il valore desiderato con uno dei seguenti

df['A'].ix[10] 
df['A'].irow(0) 

I primi utilizzi per il corretto indice. Il secondo comando, che sospetto sia quello che vuoi, trova il valore per il numero di riga, piuttosto che per il valore dell'indice, ed è tecnicamente solo due caratteri più lunghi di se ha funzionato df['A'].ix[0].

In alternativa, è possibile ripristinare gli indici in modo che possano rispondere nel modo previsto per df['A'].ix[0]:

df2=df.reset_index() 

Ciò manterrà i tuoi vecchi indici (10, 20, ecc) spostandoli in una colonna chiamato "indice" nel frame dati df2. Quindi df2['A'].ix[0] restituirà 'a'. Se si desidera rimuovere i vecchi indici basati su 10, è possibile inserire il flag drop=True nella parentesi della funzione reset_index.

+0

Penso che sia 'df ['A']. Iget (0)' perché 'df ['A']' è una 'Serie', che non ha' irow'. – Eike

+3

irow() è deprecato. Usa iloc [] per l'indicizzazione basata sulla posizione. – herrlich10

0

Nella versione di panda più recente si può anche usare df ["A"] .iat (0).