tablas seleccionar recorrer notebook insertar graficar filtrar eliminar documentacion datos data con columnas columna python pandas

python - seleccionar - Corte el marco de datos de Pandas por etiquetas que no están en una lista



seleccionar columnas de un dataframe pandas (4)

Tengo un marco de datos de pandas , df .

Quiero seleccionar todos los índices en df que no están en una lista, lista blacklist.

Ahora, uso la comprensión de lista para crear las etiquetas deseadas para cortar.

ix=[i for i in df.index if i not in blacklist] df_select=df.loc[ix]

Funciona bien, pero puede ser torpe si necesito hacer esto a menudo.

¿Hay una mejor manera de hacer esto?


Gracias a ASGM; Descubrí que necesitaba convertir el conjunto en una lista para que funcione con un MultiIndex:

mi1 = pd.MultiIndex.from_tuples([("a", 1), ("a", 2), ("b", 1), ("b", 2)]) df1 = pd.DataFrame(data={"aaa":[1,2,3,4]}, index=mi1) setValid = set(df1.index) - set([("a", 2)]) df1.loc[list(setValid)] # works df1.loc[setValid] # fails

(lo siento no puedo comentar, rep insuficiente)


Puede usar set() para crear la diferencia entre sus índices originales y los que desea eliminar:

df.loc[set(df.index) - set(blacklist)]

Tiene la ventaja de ser parco, además de ser más fácil de leer que una lista de comprensión.


Use isin en el índice e invierta el índice booleano para realizar la selección de etiquetas:

In [239]: df = pd.DataFrame({''a'':np.random.randn(5)}) df Out[239]: a 0 -0.548275 1 -0.411741 2 -1.187369 3 1.028967 4 -2.755030 In [240]: t = [2,4] df.loc[~df.index.isin(t)] Out[240]: a 0 -0.548275 1 -0.411741 3 1.028967


import pandas as pd df = pd.DataFrame(data=[5,6,7,8], index=[1,2,3,4], columns=[''D'',]) blacklist = [2,3] #your current way ... ix=[i for i in df.index if i not in blacklist] df_select=df.loc[ix] # use a mask mask = [True if x else False for x in df.index if x not in blacklist] df.loc[mask]

http://pandas.pydata.org/pandas-docs/dev/indexing.html#indexing-label realidad, loc y iloc toman una matriz booleana, en este caso la mask . a partir de ahora puede reutilizar esta máscara y debería ser más eficiente.