inplaceпараметр:
df.dropna(axis='index', how='all', inplace=True)
в Pandasі в цілому означає:
1. Pandas створює копію вихідних даних
2. ... робить деякі обчислення на ньому
3. ... присвоює результати вихідним даним.
4. ... видаляє копію.
Як ви можете прочитати в подальшій частині моєї відповіді нижче, ми все ще можемо мати вагомі причини використовувати цей параметр, тобто inplace operations, але ми повинні уникати його, якщо зможемо, оскільки це породжує більше проблем, як:
1. Ваш код буде важче налагодити (фактично SettingwithCopyWarning означає попередження про цю можливу проблему)
2. Конфлікт із ланцюжком методів
Тож є навіть випадок, коли ми мали б ним уже скористатися?
Безумовно, так. Якщо ми використовуємо панди або будь-який інструмент для обробки величезного набору даних, ми можемо легко зіткнутися з ситуацією, коли деякі великі дані можуть споживати всю нашу пам’ять. Щоб уникнути цього небажаного ефекту, ми можемо скористатися деякими методами, такими як ланцюжок методів :
(
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"]]
)
які роблять наш код більш компактним (хоча його також важче інтерпретувати та налагоджувати) і споживають менше пам'яті, оскільки ланцюгові методи працюють із повернутими значеннями іншого методу, що призводить до отримання лише однієї копії вхідних даних. Ми чітко бачимо, що після цієї операції у нас буде 2 рази споживання оригінальної пам'яті.
Або ми можемо використовувати inplaceпараметр (хоча його теж важче інтерпретувати та налагоджувати). Наше споживання пам’яті становитиме 2 х вихідних даних , але споживання пам'яті після цієї операції залишається 1 х вихідних даних , що, якщо хтось, коли б працював з величезними наборами даних, точно знає, це може бути велика вигода.
Остаточний висновок:
Уникайте використання inplaceпараметра, якщо ви не працюєте з величезними даними та не знаєте про можливі проблеми у разі його використання.
inplace=Trueфункція returnNoneinplace=Falseповертає копію об’єкта з виконаною операцією. Документи з цим досить чіткі, чи є щось, що плутає з конкретною частиною? ЗокремаIf True, do operation inplace and return None.