Eliminar fila de DataFrame en Pandas según el valor de la columna
Tengo el siguiente marco de datos:
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?
Aceptado
Si lo entiendo correctamente, debería ser tan simple como:
df = df[df.line_race != 0]
Pero para futuros evasores, podría mencionar que df = df[df.line_race != 0]
no hace nada al intentar filtrar por None
valores faltantes.
Funciona:
df = df[df.line_race != 0]
No hace nada:
df = df[df.line_race != None]
Funciona:
df = df[df.line_race.notnull()]
solo para agregar otra solución, particularmente útil si está utilizando los nuevos asesores de pandas, otras soluciones reemplazarán a los pandas originales y perderán a los asesores
df.drop(df.loc[df['line_race']==0].index, inplace=True)
En caso de múltiples valores y str dtype
Usé lo siguiente para filtrar los valores dados en una columna:
def filter_rows_by_values(df, col, values):
return df[~df[col].isin(values)]
Ejemplo:
En un DataFrame quiero eliminar filas que tienen valores "b" y "c" en la columna "str"
df = pd.DataFrame({"str": ["a","a","a","a","b","b","c"], "other": [1,2,3,4,5,6,7]})
df
str other
0 a 1
1 a 2
2 a 3
3 a 4
4 b 5
5 b 6
6 c 7
filter_rows_by_values(df, "str", ["b","c"])
str other
0 a 1
1 a 2
2 a 3
3 a 4