Tengo el siguiente DataFrame:
daysago line_race rating rw wrating
line_date
2007-03-31 62 11 56 1.000000 56.000000
2007-03-10 83 11 67 1.000000 67.000000
2007-02-10 111 9 66 1.000000 66.000000
2007-01-13 139 10 83 0.880678 73.096278
2006-12-23 160 10 88 0.793033 69.786942
2006-11-09 204 9 52 0.636655 33.106077
2006-10-22 222 8 66 0.581946 38.408408
2006-09-29 245 9 70 0.518825 36.317752
2006-09-16 258 11 68 0.486226 33.063381
2006-08-30 275 8 72 0.446667 32.160051
2006-02-11 475 5 65 0.164591 10.698423
2006-01-13 504 0 70 0.142409 9.968634
2006-01-02 515 0 64 0.134800 8.627219
2005-12-06 542 0 70 0.117803 8.246238
2005-11-29 549 0 70 0.113758 7.963072
2005-11-22 556 0 -1 0.109852 -0.109852
2005-11-01 577 0 -1 0.098919 -0.098919
2005-10-20 589 0 -1 0.093168 -0.093168
2005-09-27 612 0 -1 0.083063 -0.083063
2005-09-07 632 0 -1 0.075171 -0.075171
2005-06-12 719 0 69 0.048690 3.359623
2005-05-29 733 0 -1 0.045404 -0.045404
2005-05-02 760 0 -1 0.039679 -0.039679
2005-04-02 790 0 -1 0.034160 -0.034160
2005-03-13 810 0 -1 0.030915 -0.030915
2004-11-09 934 0 -1 0.016647 -0.016647
Necesito eliminar las filas donde line_race
es igual a 0
. ¿Cuál es la forma más eficiente de hacer esto?
Respuestas:
Si lo entiendo correctamente, debería ser tan simple como:
fuente
df
es grande? ¿O puedo hacerlo en el lugar?df
fila de 2M y fue bastante rápido.df = df[df['line race'] != 0]
df=df[~df['DATE'].isin(['2015-10-30.1', '2015-11-30.1', '2015-12-31.1'])]
Pero para cualquier bypass futuro, podría mencionar que
df = df[df.line_race != 0]
no hace nada al intentar filtrarNone
valores faltantes.Funciona:
No hace nada:
Funciona:
fuente
df = df[df.columns[2].notnull()]
, pero de una forma u otra necesita poder indexar la columna de alguna manera.df = df[df.line_race != 0]
elimina las filas pero tampoco restablece el índice. Entonces, cuando agrega otra fila en el df, es posible que no se agregue al final. Me gustaría recomendar el restablecimiento del índice después de que la operación (df = df.reset_index(drop=True)
)==
operador para comenzar. stackoverflow.com/questions/3257919/…La mejor manera de hacerlo es con el enmascaramiento booleano:
ACTUALIZACIÓN: Ahora que pandas 0.13 está fuera, otra forma de hacerlo es
df.query('line_race != 0')
.fuente
query
. Permite más ricos criterios de selección (por ejemplo, conjunto similar a las operaciones similares.df.query('variable in var_list')
Donde 'var_list' es una lista de valores deseados)query
no es muy útil si el nombre de la columna tiene un espacio en él.df = df.rename(columns=lambda x: x.strip().replace(' ','_'))
solo para agregar otra solución, particularmente útil si está utilizando los nuevos evaluadores de pandas, otras soluciones reemplazarán a los pandas originales y perderán a los evaluadores
fuente
.reset_index()
si alguien termina usandoSi desea eliminar filas basadas en múltiples valores de la columna, puede usar:
Para soltar todas las filas con valores 0 y 10 para
line_race
.fuente
drop = [0, 10]
y luego algo comodf[(df.line_race != drop)]
No obstante, la respuesta dada es correcta, ya que alguien de arriba dijo que puede usar, lo
df.query('line_race != 0')
que dependiendo de su problema es mucho más rápido. Altamente recomendado.fuente
DataFrame
nombres de variables largos como yo (y, me atrevería a adivinar, todos en comparación con losdf
utilizados para los ejemplos), porque solo tiene que escribirlo una vez.Aunque las respuestas anteriores son casi similares a lo que voy a hacer, pero usar el método de índice no requiere usar otro método de indexación .loc (). Se puede hacer de manera similar pero precisa como
fuente
Otra forma de hacerlo. Puede que no sea la forma más eficiente, ya que el código parece un poco más complejo que el código mencionado en otras respuestas, pero sigue siendo una forma alternativa de hacer lo mismo.
fuente
Compilé y ejecuté mi código. Este es el código exacto. Puedes probarlo tú mismo.
Si tiene algún carácter especial o espacio en el nombre de la columna, puede escribirlo
''
como en el código dado:Si solo hay un nombre de columna de cadena sin espacio ni caracteres especiales, puede acceder directamente a él.
fuente
Simplemente agregue otra forma para DataFrame expandido en todas las columnas:
Ejemplo:
fuente