Tengo un marco de datos 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
Entonces quiero soltar filas con ciertos números de secuencia que se indican en una lista, supongamos que aquí se [1,2,4],
deja:
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?
Respuestas:
Use DataFrame.drop y páselo una serie de etiquetas de índice:
fuente
axis=0
(0 = filas, 1 = columnas) yinplace=True
como endf.drop(df.index[[1,3]], axis=0, inplace=True)
. @mezzanaccio, si sabe específicamente qué índices desea reemplazar (y también usando su ejemplo 0 a n):df.drop(df.index[range(0, n)], axis=0, inplace=True)
Tenga en cuenta que puede ser importante utilizar el comando "en el lugar" cuando desee hacer la línea desplegable.
Debido a que su pregunta original no devuelve nada, se debe usar este comando. http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.drop.html
fuente
Si el DataFrame es enorme, y el número de filas que se deben eliminar también es grande, entonces la eliminación simple por índice
df.drop(df.index[])
lleva demasiado tiempo.En mi caso, tengo un DataFrame de índices múltiples con flotadores
100M rows x 3 cols
y necesito eliminar10k
filas de él. El método más rápido que encontré es, bastante contradictorio, atake
las filas restantes.Deje
indexes_to_drop
ser una matriz de índices posicionales para soltar ([1, 2, 4]
en la pregunta).En mi caso esto tomó
20.5s
, mientras que el simpledf.drop
tomó5min 27s
y consumió mucha memoria. El DataFrame resultante es el mismo.fuente
También puedes pasar a DataFrame.drop la etiqueta en sí (en lugar de Series de etiquetas de índice):
Lo que es equivalente a:
fuente
Resolví esto de una manera más simple, solo en 2 pasos.
Paso 1: Primero forme un marco de datos con filas / datos no deseados.
Paso 2: utilice el índice de este marco de datos no deseado para descartar las filas del marco de datos original.
Ejemplo:
Supongamos que tiene un marco de datos df que tiene tantas columnas como 'Edad', que es un número entero. Ahora supongamos que desea eliminar 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.
fuente
Si quiero soltar una fila que tiene un índice
x
, digamos , haría lo siguiente:Si quisiera eliminar varios índices (digamos que estos índices están en la lista
unwanted_indices
), haría:fuente
Aquí hay un ejemplo un poco específico que me gustaría mostrar. Supongamos que tiene muchas entradas duplicadas en algunas de sus filas. Si tiene entradas de cadena, podría usar fácilmente los métodos de cadena para encontrar todos los índices que soltar.
Y ahora para soltar esas filas usando sus índices
fuente
En un comentario a la respuesta de @ theodros-zelleke, @ j-jones preguntó qué hacer si el índice no es único. Tuve que lidiar con tal situación. Lo que hice fue renombrar los duplicados en el índice antes de llamar
drop()
, a la:donde
rename_duplicates()
es una función que definí que pasó por los elementos del índice y renombró los duplicados. Usé el mismo patrón de cambio de nombre que el que sepd.read_csv()
usa en las columnas, es decir,"%s.%d" % (name, count)
dóndename
está el nombre de la fila ycount
cuántas veces se ha producido anteriormente.fuente
Determinar el índice del booleano como se describió anteriormente, por ejemplo
puede usar más memoria que determinar el índice usando este método
aplicado así
Este método es útil cuando se trata de grandes marcos de datos y memoria limitada.
fuente
Use solo el argumento Índice para soltar la fila: -
Para varias filas: -
fuente
Considere un marco de datos de ejemplo
queremos soltar las filas de índice segunda y tercera.
Enfoque 1:
Enfoque 2
fuente