Каковы рекомендации по использованию inplace
?
Например,
df = df.reset_index()
or
df.reset_index(inplace=True)
Такой же, но другой?
Каковы рекомендации по использованию inplace
?
Например,
df = df.reset_index()
or
df.reset_index(inplace=True)
Такой же, но другой?
С точки зрения результирующего кадра данных 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_profiler
для выполнения некоторых тестов использования памяти:
%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
Эти различия могут быть или не быть значительными в зависимости от варианта использования (например, специальный исследовательский анализ по сравнению с производственным кодом), размера данных и доступных аппаратных ресурсов. В общем, было бы неплохо использовать версию на месте, когда это возможно, для лучшей памяти и эффективности времени выполнения.
df.reset_index(inplace=True)
возвращает None, к вашему сведению --
- person user3659451; 17.12.2015