Seleccionar filas de Pandas según el índice de la lista

105

Tengo un marco de datos 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

Luego quiero seleccionar filas con ciertos números de secuencia que se indican en una lista, supongamos que aquí está [1,3], luego a la izquierda:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

¿Cómo o qué función puede hacer eso?

user2806761
fuente

Respuestas:

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

debería hacer el truco! Cuando indexo con marcos de datos, siempre uso el método .ix (). Es mucho más fácil y flexible ...

ACTUALIZAR Este ya no es el método aceptado para indexar. El ixmétodo está obsoleto. Úselo .ilocpara indexación basada en números enteros y .locpara indexación basada en etiquetas.

Orgullo Woody
fuente
14
Esto ahora está en desuso, .iloc debería usarse para indexación posicional
t_warsop
86

también puedes usar iloc:

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

Esto no funcionará si los índices de su marco de datos no se corresponden con el orden de las filas debido a cálculos anteriores. En ese caso use:

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

... como se sugiere en otras respuestas.

yemu
fuente
61

De otra forma (aunque es un código más largo) pero es más rápido que los códigos anteriores. Compruébelo usando la función% timeit:

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

PD: averiguas la razón

ingrese la descripción de la imagen aquí

Amruth Lakkavaram
fuente
1
uso df.index.get_level_values(0).isinpara
multiindex
4

Para conjuntos de datos grandes, es eficiente en la memoria leer solo las filas seleccionadas a través del skiprowsparámetro.

Ejemplo

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

Esto ahora devolverá un DataFrame de un archivo que omite todas las filas excepto 1 y 3.


Detalles

De los documentos :

skiprows : tipo lista o entero o invocable, predeterminado None

...

Si es invocable, la función invocable se evaluará contra los índices de fila, devolviendo True si la fila debe omitirse y False en caso contrario. Un ejemplo de un argumento invocable válido seríalambda x: x in [0, 2]

Esta característica funciona en la versión pandas 0.20.0+. Consulte también el número correspondiente y una publicación relacionada .

pylang
fuente