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

Каковы рекомендации по использованию inplace?

Например,

df = df.reset_index()

or

df.reset_index(inplace=True)

Такой же, но другой?


person user3659451    schedule 16.12.2015    source источник
comment
То же самое. Я предпочитаю первый способ для простоты чтения рядом с другими строками, которые не воздействуют на фрейм данных на месте.   -  person itzy    schedule 16.12.2015


Ответы (1)


С точки зрения результирующего кадра данных 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

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

person YS-L    schedule 17.12.2015
comment
df.reset_index(inplace=True) возвращает None, к вашему сведению -- - person user3659451; 17.12.2015