una numero matriz lista filas fila eliminar elementos como columnas python pandas

python - numero - ¿Cómo se puede eliminar una lista de filas del marco de datos de Pandas?



eliminar filas pandas python (7)

En un comentario a la respuesta de @ theodros-zelleke, @ j-jones preguntó qué hacer si el índice no es único. Tuve que lidiar con una situación así. Lo que hice fue cambiar el nombre de los duplicados en el índice antes de llamar a drop() , a la:

dropped_indexes = <determine-indexes-to-drop> df.index = rename_duplicates(df.index) df.drop(df.index[dropped_indexes], inplace=True)

donde rename_duplicates() es una función que rename_duplicates() que pasó por los elementos del índice y renombró los duplicados. Utilicé el mismo patrón de cambio de nombre que pd.read_csv() usa en las columnas, es decir, "%s.%d" % (name, count) , donde name es el nombre de la fila y el count es cuántas veces ha ocurrido anteriormente .

Tengo un dataframe df:

>>> df sales discount net_sales cogs STK_ID RPT_Date 600141 20060331 2.709 NaN 2.709 2.245 20060630 6.590 NaN 6.590 5.291 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 soltar filas con ciertos números de secuencia que se indican en una lista, supongamos que aquí está [1,2,4], luego a la izquierda:

sales discount net_sales cogs STK_ID RPT_Date 600141 20060331 2.709 NaN 2.709 2.245 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?


Resolví esto de una manera más simple, solo en 2 pasos.

Paso 1: primero forma un marco de datos con filas / datos no deseados.

Paso 2: utilice el índice de este marco de datos no deseado para eliminar las filas del marco de datos original.

Ejemplo:

Supongamos que tiene un marco de datos de tantas columnas como ''Edad'' que es un número entero. Ahora digamos que quiere soltar todas las filas con ''Edad'' como número negativo.

Paso 1: df_age_negative = df [df [''Age''] <0]

Paso 2: df = df.drop (df_age_negative.index, axis = 0)

Espero que esto sea mucho más simple y te ayude.


Si el DataFrame es enorme, y el número de filas que se deben eliminar también es grande, el simple drop by index df.drop(df.index[]) lleva demasiado tiempo.

En mi caso, tengo un DataFrame multi-indexado de flotantes con 100M rows x 3 cols , y necesito eliminar 10k filas de él. El método más rápido que encontré es, en contra de la intuición, take las filas restantes.

Deje que indexes_to_drop sea ​​una matriz de índices posicionales para soltar ( [1, 2, 4] en la pregunta).

indexes_to_keep = set(range(df.shape[0])) - set(indexes_to_drop) df_sliced = df.take(list(indexes_to_keep))

En mi caso esto tomó 20.5s , mientras que el simple df.drop tomó 5min 27s df.drop y consumió mucha memoria. El DataFrame resultante es el mismo.


Si quiero soltar una fila que digamos index x , haría lo siguiente:

df = df[df.index != x]

Si quisiera eliminar varios índices (digamos que estos índices están en la lista de los valores unwanted_indices ), lo haría:

desired_indices = [i for i in len(df.index) if i not in unwanted_indices] desired_df = df.iloc[desired_indices]


También puede pasar a DataFrame.drop la etiqueta en sí (en lugar de Series de etiquetas de índice):

In[17]: df Out[17]: a b c d e one 0.456558 -2.536432 0.216279 -1.305855 -0.121635 two -1.015127 -0.445133 1.867681 2.179392 0.518801 In[18]: df.drop(''one'') Out[18]: a b c d e two -1.015127 -0.445133 1.867681 2.179392 0.518801

Lo cual es equivalente a:

In[19]: df.drop(df.index[[0]]) Out[19]: a b c d e two -1.015127 -0.445133 1.867681 2.179392 0.518801



Usa DataFrame.drop y DataFrame.drop una serie de etiquetas de índice:

In [65]: df Out[65]: one two one 1 4 two 2 3 three 3 2 four 4 1 In [66]: df.drop(df.index[[1,3]]) Out[66]: one two one 1 4 three 3 2