• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

402
Vistas
Eliminación de la fila 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 manera más eficiente de hacer esto?

over 3 years ago · Santiago Trujillo
14 Respuestas
Responde la pregunta

0

Compilé y ejecuté mi código. Este es un código exacto. Puedes probarlo tú mismo.

 data = pd.read_excel('file.xlsx')

Si tiene algún carácter especial o espacio en el nombre de la columna, puede escribirlo en '' como en el código dado:

 data = data[data['expire/t'].notnull()] print (date)

Si solo hay un nombre de columna de una sola cadena sin ningún espacio o carácter especial, puede acceder directamente a él.

 data = data[data.expire ! = 0] print (date)
over 3 years ago · Santiago Trujillo Denunciar

0

En caso de valores múltiples 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
over 3 years ago · Santiago Trujillo Denunciar

0

Agregando una forma más de hacer esto.

 df = df.query("line_race!=0")
over 3 years ago · Santiago Trujillo Denunciar

0

Una de las formas más eficientes y pandaicas es usar el método eq() :

 df[~df.line_race.eq(0)]
over 3 years ago · Santiago Trujillo Denunciar

0

En caso de que necesite eliminar la fila, pero el valor puede estar en diferentes columnas. En mi caso, estaba usando porcentajes, así que quería eliminar las filas que tienen un valor de 1 en cualquier columna, ya que eso significa que es el 100%

 for x in df: df.drop(df.loc[df[x]==1].index, inplace=True)

No es óptimo si su df tiene demasiadas columnas.

over 3 years ago · Santiago Trujillo Denunciar

0

Aunque la respuesta anterior es casi similar a lo que voy a hacer, pero usar el método index no requiere usar otro método de indexación .loc(). Se puede hacer de una manera similar pero precisa como

 df.drop(df.index[df['line_race'] == 0], inplace = True)
over 3 years ago · Santiago Trujillo Denunciar

0

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)
over 3 years ago · Santiago Trujillo Denunciar

0

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.

 df = df.drop(df[df['line_race']==0].index)
over 3 years ago · Santiago Trujillo Denunciar

0

Si desea eliminar filas en función de varios valores de la columna, puede usar:

 df[(df.line_race != 0) & (df.line_race != 10)]

Para eliminar todas las filas con valores 0 y 10 para line_race .

over 3 years ago · Santiago Trujillo Denunciar

0

Simplemente agregando otra forma para que DataFrame se expanda en todas las columnas:

 for column in df.columns: df = df[df[column]!=0]

Ejemplo:

 def z_score(data,count): threshold=3 for column in data.columns: mean = np.mean(data[column]) std = np.std(data[column]) for i in data[column]: zscore = (i-mean)/std if(np.abs(zscore)>threshold): count=count+1 data = data[data[column]!=i] return data,count
over 3 years ago · Santiago Trujillo Denunciar

0

Sin embargo, la respuesta dada es correcta, ya que alguien dijo que puede usar df.query('line_race != 0') que, dependiendo de su problema, es mucho más rápido. Altamente recomendado.

over 3 years ago · Santiago Trujillo Denunciar

0

Pero para futuros transgresores, podría mencionar que df = df[df.line_race != 0] no hace nada cuando intenta 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()]
over 3 years ago · Santiago Trujillo Denunciar

0

Si estoy entendiendo correctamente, debería ser tan simple como:

 df = df[df.line_race != 0]
over 3 years ago · Santiago Trujillo Denunciar

0

La mejor manera de hacer esto es con un enmascaramiento booleano:

 In [56]: df Out[56]: line_date daysago line_race rating raw wrating 0 2007-03-31 62 11 56 1.000 56.000 1 2007-03-10 83 11 67 1.000 67.000 2 2007-02-10 111 9 66 1.000 66.000 3 2007-01-13 139 10 83 0.881 73.096 4 2006-12-23 160 10 88 0.793 69.787 5 2006-11-09 204 9 52 0.637 33.106 6 2006-10-22 222 8 66 0.582 38.408 7 2006-09-29 245 9 70 0.519 36.318 8 2006-09-16 258 11 68 0.486 33.063 9 2006-08-30 275 8 72 0.447 32.160 10 2006-02-11 475 5 65 0.165 10.698 11 2006-01-13 504 0 70 0.142 9.969 12 2006-01-02 515 0 64 0.135 8.627 13 2005-12-06 542 0 70 0.118 8.246 14 2005-11-29 549 0 70 0.114 7.963 15 2005-11-22 556 0 -1 0.110 -0.110 16 2005-11-01 577 0 -1 0.099 -0.099 17 2005-10-20 589 0 -1 0.093 -0.093 18 2005-09-27 612 0 -1 0.083 -0.083 19 2005-09-07 632 0 -1 0.075 -0.075 20 2005-06-12 719 0 69 0.049 3.360 21 2005-05-29 733 0 -1 0.045 -0.045 22 2005-05-02 760 0 -1 0.040 -0.040 23 2005-04-02 790 0 -1 0.034 -0.034 24 2005-03-13 810 0 -1 0.031 -0.031 25 2004-11-09 934 0 -1 0.017 -0.017 In [57]: df[df.line_race != 0] Out[57]: line_date daysago line_race rating raw wrating 0 2007-03-31 62 11 56 1.000 56.000 1 2007-03-10 83 11 67 1.000 67.000 2 2007-02-10 111 9 66 1.000 66.000 3 2007-01-13 139 10 83 0.881 73.096 4 2006-12-23 160 10 88 0.793 69.787 5 2006-11-09 204 9 52 0.637 33.106 6 2006-10-22 222 8 66 0.582 38.408 7 2006-09-29 245 9 70 0.519 36.318 8 2006-09-16 258 11 68 0.486 33.063 9 2006-08-30 275 8 72 0.447 32.160 10 2006-02-11 475 5 65 0.165 10.698

ACTUALIZACIÓN: ahora que pandas 0.13 está disponible, otra forma de hacerlo es df.query('line_race != 0') .

over 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda