¿Cuál es la forma más rápida / sencilla de soltar los valores nan e inf / -inf de un DataFrame de pandas sin reiniciar mode.use_inf_as_null? Me gustaría poder usar los argumentos subsety howde dropna, excepto con infvalores que se consideran faltantes, como:
df.dropna(subset=["col1", "col2"], how="all", with_inf=True)
¿es posible? ¿Hay alguna manera de decir dropnaque se incluya infen su definición de valores faltantes?

infvalores a un valor predefinidointcomo0, por ejemplo , en una determinada columna?.replace(..., 0). Para hacer solo en las columnas, actualice esas columnas, es decirdf[cols] = df[cols].replace(..., 0)replaceno funciona en el lugar, por lo queDataFramese devuelve uno nuevoCon el contexto de la opción, esto es posible sin configurarlo permanentemente
use_inf_as_na. Por ejemplo:Por supuesto, se puede configurar para tratar de
infformaNaNpermanente conPara versiones anteriores, reemplace
use_inf_as_naconuse_inf_as_null.fuente
use_inf_as_nullhabía quedado en desuso y se eliminará en una versión futura. Usar en suuse_inf_as_nalugar. ¿Agregar a / actualizar respuesta?infcomo nulos en los niveles de configuración global en lugar del nivel operativo. Esto podría ahorrar tiempo al imputar primero los valores.Aquí hay otro método que usa
.locpara reemplazar inf con nan en una Serie:Entonces, en respuesta a la pregunta original:
fuente
Uso (rápido y simple):
Esta respuesta se basa en la respuesta de DougR en otra pregunta. Aquí un código de ejemplo:
Resultado:
fuente
Otra solución más sería utilizar el
isinmétodo. Úselo para determinar si cada valor es infinito o falta y luego encadene elallmétodo para determinar si todos los valores en las filas son infinitos o faltantes.Finalmente, use la negación de ese resultado para seleccionar las filas que no tienen todos los valores infinitos o faltantes a través de la indexación booleana.
fuente
La solución anterior modificará los correos electrónicos
infque no están en las columnas de destino. Para remediar eso,fuente
{v: lst for v in cols}Puedes usar
pd.DataFrame.maskconnp.isinf. Primero debe asegurarse de que sus series de marcos de datos sean todas de tipofloat. Luego utilícelodropnacon su lógica existente.fuente