inplace
Parametr:
df.dropna(axis='index', how='all', inplace=True)
w Pandas
ogólności oznacza:
1. Pandas tworzy kopię oryginalnych danych
2. ... wykonuje jakieś obliczenia
3. ... przypisuje wyniki do oryginalnych danych.
4. ... usuwa kopię.
Jak możesz przeczytać w dalszej części mojej odpowiedzi poniżej, nadal możemy mieć dobry powód, aby używać tego parametru, tj. inplace operations
, Ale powinniśmy go unikać, jeśli możemy, ponieważ generuje więcej problemów, takich jak:
1. Twój kod będzie trudniejszy do debugowania (w rzeczywistości SettingwithCopyWarning oznacza ostrzeżenie o tym możliwym problemie)
2. Konflikt z łączeniem metod
Więc jest nawet przypadek, kiedy powinniśmy go jeszcze użyć?
Zdecydowanie tak. Jeśli użyjemy pand lub dowolnego narzędzia do obsługi ogromnego zbioru danych, możemy łatwo stawić czoła sytuacji, w której niektóre duże zbiory danych mogą pochłonąć całą naszą pamięć. Aby uniknąć tego niepożądanego efektu, możemy użyć kilku technik, takich jak łączenie metod :
(
wine.rename(columns={"color_intensity": "ci"})
.assign(color_filter=lambda x: np.where((x.hue > 1) & (x.ci > 7), 1, 0))
.query("alcohol > 14 and color_filter == 1")
.sort_values("alcohol", ascending=False)
.reset_index(drop=True)
.loc[:, ["alcohol", "ci", "hue"]]
)
co sprawia, że nasz kod jest bardziej zwarty (choć trudniejszy do zinterpretowania i debugowania) i zużywa mniej pamięci, ponieważ metody łańcuchowe działają z wartościami zwracanymi przez inną metodę, w wyniku czego powstaje tylko jedna kopia danych wejściowych. Widzimy wyraźnie, że po tych operacjach będziemy mieć 2 x pierwotne zużycie pamięci danych .
Lub możemy użyć inplace
parametru (choć trudniej też zinterpretować i debugować), nasze zużycie pamięci wyniesie 2 x oryginalne dane , ale nasze zużycie pamięci po tej operacji pozostanie 1 x oryginalne dane , które jeśli ktoś kiedykolwiek pracował z ogromnymi zbiorami danych dokładnie wie, może być duża korzyść.
Ostateczna konkluzja:
Unikaj używania inplace
parametru, chyba że nie pracujesz z dużymi danymi i pamiętaj o możliwych problemach, jeśli nadal go używasz.
inplace=True
zwracaNone
inplace=False
zwraca kopię obiektu z wykonaną operacją. Dokumenty są dość jasne na ten temat, czy jest coś, co jest mylące z określoną częścią? SpeficallyIf True, do operation inplace and return None.