Puedo usar la pandas
dropna()
funcionalidad para eliminar filas con algunas o todas las columnas configuradas como NA
's. ¿Existe una función equivalente para eliminar filas con todas las columnas con valor 0?
P kt b tt mky depth
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 1.1 3 4.5 2.3 9.0
En este ejemplo, nos gustaría eliminar las primeras 4 filas del marco de datos.
¡Gracias!
Respuestas:
Resulta que esto se puede expresar muy bien de manera vectorizada:
fuente
df = df[(df.T != 0).any()]
rows with all columns having value 0
, pero se puede inferir elall
método.Un trazador de líneas. No se necesita transposición:
Y para aquellos a los que les gusta la simetría, esto también funciona ...
fuente
df.loc[(df != 0).any(1)]
. ¡Trabajo en equipo!axis=1
por ser explícito; más pitónico en mi opinióndf
df = df.loc[(df!=0).all(axis=1)]
ydf = df.loc[(df!=0).any(axis=1)]
eliminar filas con ceros, ya que sería el equivalente real a dropna ().Busco esta pregunta una vez al mes y siempre tengo que buscar la mejor respuesta de los comentarios:
¡Gracias Dan Allan!
fuente
Reemplace los ceros con
nan
y luego suelte las filas con todas las entradas comonan
. Después de eso, reemplácelonan
con ceros.fuente
Creo que esta solución es la más corta:
fuente
Un par de soluciones que encontré útiles al buscar esto, especialmente para conjuntos de datos más grandes:
Continuando con el ejemplo de @ U2EF1:
En un conjunto de datos más grande:
fuente
df[~(df.values.prod(axis=1) == 0) | ~(df.values.sum(axis=1)==0)]
bdf[np.square(bdf.values).sum(axis=1) != 0]
Resultado:
fuente
ValueError: labels [True ... ] not contained in matrix
df = df.drop(temp)
usardf = df.drop(df[temp].index)
Puede utilizar una
lambda
función rápida para comprobar si todos los valores de una fila determinada lo son0
. Luego, puede usar el resultado de aplicar esolambda
como una forma de elegir solo las filas que coinciden o no coinciden con esa condición:Rendimientos:
fuente
Otra alternativa:
fuente
Para mí este código:
df.loc[(df!=0).any(axis=0)]
no funcionó. Devolvió el conjunto de datos exacto.En cambio, usé
df.loc[:, (df!=0).any(axis=0)]
y eliminé todas las columnas con valores 0 en el conjunto de datosLa función
.all()
eliminó todas las columnas en las que hay valores cero en mi conjunto de datos.fuente
Prueba este comando, funciona perfectamente.
fuente
Para eliminar todas las columnas con valores 0 en cualquier fila:
fuente