eliminare infiniti valori dai frame di dati nei panda?


220

qual è il modo più rapido / semplice per eliminare i valori nan e inf / -inf da un DataFrame di Panda senza reimpostare mode.use_inf_as_null? Mi piacerebbe essere in grado di usare gli argomenti subsete howdi dropna, tranne con infvalori considerati mancanti, come:

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

È possibile? C'è un modo per dire dropnadi includere infnella sua definizione di valori mancanti?

Risposte:


418

Il modo più semplice sarebbe quello di dare le prime replacenotizie a NaN:

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

e quindi usa il dropna:

df.replace([np.inf, -np.inf], np.nan).dropna(subset=["col1", "col2"], how="all")

Per esempio:

In [11]: df = pd.DataFrame([1, 2, np.inf, -np.inf])

In [12]: df.replace([np.inf, -np.inf], np.nan)
Out[12]:
    0
0   1
1   2
2 NaN
3 NaN

Lo stesso metodo funzionerebbe per una serie.


2
Come si può "scambiare" i infvalori con valori predefiniti intcome 0, in una determinata colonna?
3kstc,

4
@ 3kstc use .replace(..., 0). Per fare solo sulle colonne, aggiorni quelle colonne, cioèdf[cols] = df[cols].replace(..., 0)
Andy Hayden,

3
Forse vale la pena specificare che replacenon funziona sul posto, quindi DataFrameviene restituito un nuovo
Marco
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.