2012-07-23 31 views
9

Parece que no puedo encontrar una forma elegante de index a pandas.DataFrame por un índice entero. En el siguiente ejemplo, quiero obtener el valor 'a' del primer elemento de la columna 'A'.Indexar un dataframe de pandas por número entero

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

yo esperaría df['A'].ix[0] y df['A'][10] tanto para volver 'a'. df['A'][10] devuelve 'a', pero df['A'].ix[0] arroja un KeyError: 0. La única forma en que podría pensar en obtener el valor 'a' basado en el índice 0 es usar el siguiente enfoque.

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

¿Hay un camino más corto para llegar 'a' fuera de la trama de datos, utilizando el índice 0?

actualización

A partir de pandas 0.11 hay una otra manera de index by integer.

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

Este supersedes el enfoque irow.

Respuesta

12

Obtiene un error con df['A'].ix[0] porque su indexación no se inicia a 0, que comienza a las 10. Usted puede obtener el valor que desee con cualquiera de los siguientes

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

Los primeros usos de la correcta índice. El segundo comando, que sospecho es el que desea, encuentra el valor por el número de fila, en lugar de por el valor del índice, y técnicamente tiene dos caracteres más que si funcionaba df['A'].ix[0].

Alternativamente, puede restablecer los índices para que puedan responder de la forma esperada para df['A'].ix[0]:

df2=df.reset_index() 

Esto conservará sus viejos índices (10, 20, etc.) moviéndolos en una columna llamado "índice" en el marco de datos df2. Entonces df2['A'].ix[0] devolverá 'a'. Si desea eliminar los antiguos índices basados ​​en 10, puede insertar el indicador drop=True en el paréntesis de la función reset_index.

+0

Creo que es 'df ['A']. Iget (0)' porque 'df ['A']' es una 'Serie', que no tiene' irow'. – Eike

+3

irow() está en desuso. Use iloc [] para la indexación basada en posición. – herrlich10

0

En la versión más nueva de pandas, también puede usar df ["A"]. Iat (0).

Cuestiones relacionadas