jaki jest najszybszy / najprostszy sposób na usunięcie wartości nan i inf / inf z pandy DataFrame bez resetowania mode.use_inf_as_null
? Chciałbym móc używać argumentów subset
i how
argumentów dropna
, z wyjątkiem inf
wartości uważanych za brakujące, takich jak:
df.dropna(subset=["col1", "col2"], how="all", with_inf=True)
czy to możliwe? Czy istnieje sposób, aby powiedzieć, dropna
aby uwzględnić inf
w definicji brakujących wartości?
inf
wartości na predefiniowane,int
takie jak0
w określonej kolumnie?.replace(..., 0)
. Aby to zrobić tylko w kolumnach, zaktualizuj te kolumny, tj.df[cols] = df[cols].replace(..., 0)
replace
to nie działa w miejscu, więcDataFrame
powrócił nowyW kontekście opcji jest to możliwe bez stałego ustawienia
use_inf_as_na
. Na przykład:Oczywiście można go ustawić tak, aby traktował go
inf
tak samo jak naNaN
stałeW starszych wersjach, wymienić
use_inf_as_na
zuse_inf_as_null
.źródło
use_inf_as_null
zostały wycofane i zostaną usunięte w przyszłej wersji. Użyjuse_inf_as_na
zamiast tego. Dodaj / zaktualizuj odpowiedź?inf
jako wartości zerowe na poziomach ustawień globalnych zamiast na poziomie operacyjnym. Może to potencjalnie zaoszczędzić czas, przypisując najpierw wartości.Oto kolejna metoda polegająca
.loc
na zamianie inf na nan w serii:W odpowiedzi na pierwotne pytanie:
źródło
Użyj (szybki i prosty):
Ta odpowiedź opiera się na odpowiedzi DougR na inne pytanie. Oto przykładowy kod:
Wynik:
źródło
Jeszcze innym rozwiązaniem byłoby użycie tej
isin
metody. Użyj go, aby ustalić, czy każda wartość jest nieskończona, czy jej brakuje, a następnie połączall
metodę, aby ustalić, czy wszystkie wartości w wierszach są nieskończone, czy ich brakuje.Na koniec użyj negacji tego wyniku, aby wybrać wiersze, które nie mają wszystkich nieskończonych lub brakujących wartości, poprzez indeksowanie boolowskie.
źródło
Powyższe rozwiązanie zmodyfikuje te
inf
, które nie znajdują się w kolumnach docelowych. Aby temu zaradzić,źródło
{v: lst for v in cols}
Możesz używać
pd.DataFrame.mask
znp.isinf
. Najpierw upewnij się, że wszystkie serie ramek danych są typufloat
. Następnie użyjdropna
z istniejącą logiką.źródło