Рекомендации по использованию аргумента ключевого слова на месте панд

Какое руководство по использованию 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

Эти различия могут быть или не быть значительными в зависимости от варианта использования (например, временный анализ или производственный код), размера данных и доступных аппаратных ресурсов. В целом, было бы неплохо по возможности использовать версию на месте для лучшей памяти и эффективности времени выполнения.

Другие вопросы по тегам