¿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 subset
y how
de dropna
, excepto con inf
valores que se consideran faltantes, como:
df.dropna(subset=["col1", "col2"], how="all", with_inf=True)
¿es posible? ¿Hay alguna manera de decir dropna
que se incluya inf
en su definición de valores faltantes?
inf
valores a un valor predefinidoint
como0
, por ejemplo , en una determinada columna?.replace(..., 0)
. Para hacer solo en las columnas, actualice esas columnas, es decirdf[cols] = df[cols].replace(..., 0)
replace
no funciona en el lugar, por lo queDataFrame
se 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
inf
formaNaN
permanente conPara versiones anteriores, reemplace
use_inf_as_na
conuse_inf_as_null
.fuente
use_inf_as_null
había quedado en desuso y se eliminará en una versión futura. Usar en suuse_inf_as_na
lugar. ¿Agregar a / actualizar respuesta?inf
como 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
.loc
para 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
isin
método. Úselo para determinar si cada valor es infinito o falta y luego encadene elall
mé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
inf
que no están en las columnas de destino. Para remediar eso,fuente
{v: lst for v in cols}
Puedes usar
pd.DataFrame.mask
connp.isinf
. Primero debe asegurarse de que sus series de marcos de datos sean todas de tipofloat
. Luego utilícelodropna
con su lógica existente.fuente