¿Dejar caer valores infinitos de marcos de datos en pandas?

Resuelto asked hace 11 años • 10 respuestas

¿Cómo elimino los valores nan, infy -infde a DataFramesin restablecerlos mode.use_inf_as_null?

¿Puedo indicar dropnaque se incluyan infen su definición los valores faltantes para que funcione lo siguiente?

df.dropna(subset=["col1", "col2"], how="all")
 avatar Jul 05 '13 03:07
Aceptado

Primeras replace()infs con NaN:

df.replace([np.inf, -np.inf], np.nan, inplace=True)

y luego suelte NaN a través de dropna():

df.dropna(subset=["col1", "col2"], how="all", inplace=True)

Por ejemplo:

>>> df = pd.DataFrame({"col1": [1, np.inf, -np.inf], "col2": [2, 3, np.nan]})
>>> df
   col1  col2
0   1.0   2.0
1   inf   3.0
2  -inf   NaN

>>> df.replace([np.inf, -np.inf], np.nan, inplace=True)
>>> df
   col1  col2
0   1.0   2.0
1   NaN   3.0
2   NaN   NaN

>>> df.dropna(subset=["col1", "col2"], how="all", inplace=True)
>>> df
   col1  col2
0   1.0   2.0
1   NaN   3.0

El mismo método también funciona para Series.

Andy Hayden avatar Jul 04 '2013 21:07 Andy Hayden

Con la opción contexto, esto es posible sin configurarlo permanentemente use_inf_as_na. Por ejemplo:

with pd.option_context('mode.use_inf_as_na', True):
    df = df.dropna(subset=['col1', 'col2'], how='all')

Por supuesto, se puede configurar para que se trate infde forma NaNpermanente con

pd.set_option('use_inf_as_na', True)

Para versiones anteriores, reemplácelas use_inf_as_nacon use_inf_as_null.

ayhan avatar Aug 17 '2017 23:08 ayhan

Uso (rápido y sencillo):

df = df[np.isfinite(df).all(1)]

Esta respuesta se basa en la respuesta de DougR en otra pregunta. Aquí un código de ejemplo:

import pandas as pd
import numpy as np
df=pd.DataFrame([1,2,3,np.nan,4,np.inf,5,-np.inf,6])
print('Input:\n',df,sep='')
df = df[np.isfinite(df).all(1)]
print('\nDropped:\n',df,sep='')

Resultado:

Input:
    0
0  1.0000
1  2.0000
2  3.0000
3     NaN
4  4.0000
5     inf
6  5.0000
7    -inf
8  6.0000

Dropped:
     0
0  1.0
1  2.0
2  3.0
4  4.0
6  5.0
8  6.0
Markus Dutschke avatar Mar 18 '2019 18:03 Markus Dutschke