Рекомендации по использованию аргумента ключевого слова на месте панд
Какое руководство по использованию inplace
?
Например,
df = df.reset_index()
или же
df.reset_index(inplace=True)
То же самое, но другое?
1 ответ
С точки зрения результирующего DataFrame df
, два подхода одинаковы. Разница заключается в (максимальном) использовании памяти, поскольку версия на месте не создает копию DataFrame.
Рассмотрим эту настройку:
import numpy as np
import pandas as pd
def make_data():
return pd.DataFrame(np.random.rand(1000000, 100))
def func_copy():
df = make_data()
df = df.reset_index()
def func_inplace():
df = make_data()
df.reset_index(inplace=True)
Мы можем использовать memory_profile
библиотека для тестирования производительности использования памяти:
%load_ext memory_profiler
%memit func_copy()
# peak memory: 1602.66 MiB, increment: 1548.66 MiB
%memit func_inplace()
# peak memory: 817.02 MiB, increment: 762.94 MiB
Как и ожидалось, версия на месте более эффективно использует память.
С другой стороны, также существует нетривиальное различие во времени выполнения между подходами, когда размер данных достаточно велик (например, в приведенном выше примере):
%timeit func_copy()
1 loops, best of 3: 2.56 s per loop
%timeit func_inplace()
1 loops, best of 3: 1.35 s per loop
Эти различия могут быть или не быть значительными в зависимости от варианта использования (например, временный анализ или производственный код), размера данных и доступных аппаратных ресурсов. В целом, было бы неплохо по возможности использовать версию на месте для лучшей памяти и эффективности времени выполнения.