es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo iterar cada fila de una columna de un DataFrame y eliminar las filas no numéricas.

Tengo este código y no puedo eliminar una fila específica del DataFrame. ¿Cómo puedo mejorar este código? Quiero eliminar los valores de esa columna que no sean numéricos. Esta forma no funciona porque hay algunas columnas faltantes que fueron eliminadas anteriormente, por lo que obtengo el siguiente error:

KeyError: ‘[1093] not found in axis’

Código:

i = 0
for row in new_dataset2.GbCity:
    if isinstance(row,str):
        if not(row.isdigit()):
            new_dataset2.drop(i)
    i+=1
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mejorar el código anterior, podemos utilizar la indexación booleana para seleccionar las filas donde los valores en la columna son numéricos. Luego, podemos reasignar este DataFrame filtrado a new_dataset_2 para sobrescribir el DataFrame original. Aquí tienes un ejemplo de código:

    # indexación booleana para seleccionar las filas donde GbCity es numérica
    mask = pd.to_numeric(new_dataset_2['GbCity'], errors='coerce').notnull()
    
    # reasignar el DataFrame filtrado a new_dataset_2
    new_dataset_2 = new_dataset_2[mask]
    

    En el código anterior, pd.to_numeric() se utiliza para convertir la columna GbCity en valores numéricos, con los valores no numéricos convertidos en NaN. Luego usamos el método notnull() para crear una máscara booleana para las filas donde los valores en la columna son numéricos. Finalmente, utilizamos esta máscara para seleccionar las filas correspondientes del DataFrame new_dataset_2 y reasignar el DataFrame filtrado a new_dataset_2.

    Este código debería funcionar incluso si se eliminaron algunas columnas previamente, ya que estamos seleccionando filas basadas en una máscara booleana en lugar de índices de fila.

Comments are closed.