Метод Pandas .min () не кажется самым быстрым - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь взять min с, max с, mean с и т. Д. Столбцов моей Pandas df (все числовые значения какого-либо вида), и не похоже, что методы Pandasбыстрый.Кажется, что если я впервые нажму на .values, время выполнения этих операций значительно улучшится.Является ли это желаемым поведением (имеется в виду, что Панды делают что-то глупое или намеренное? Возможно, я использую дополнительную память, нажимая на нее .values, или я делаю предположения и / или облегчаю это каким-то образом, что не является данностью ...).

«Доказательства» неожиданного поведения:

df = pd.DataFrame(np.random.randint(0,1000,size=(100000000, 4)), columns=list('ABCD'))

start = time.time()
print(df['A'].min())
print(time.time()-start)`

# 0
# 1.35876178741


start = time.time()
df['A'].values.min()
print(time.time()-start)

# 0
# 0.225932121277

start = time.time()
print(np.mean(df['A']))
print(time.time()-start)

# 499.49969672
# 1.58990907669

start = time.time()
print(df['A'].values.mean())
print(time.time()-start)

# 499.49969672
# 0.244406938553

1 Ответ

0 голосов
/ 10 декабря 2018

Когда вы просто вызываете столбец, вы уменьшаете его до ряда панд, который основан на массиве-массиве, но с гораздо большим количеством обернутых вокруг него.Объекты Pandas оптимизированы для операций с электронными таблицами или базами данных, таких как объединения, поиск и т. Д.

Когда вы вызываете .values для столбца, он превращается в пустой массив, который является типом d, оптимизированным для математических и векторных вычислений.операции в C.Даже при «развёртывании» к типу ndarray эффективность математической операции превосходит объемный тип данных. Вот краткое обсуждение некоторых различий.

В качестве дополнительного примечания есть специальный модуль - timeit для такого типа временных сравнений

type(df['a'])

pandas.core.series.Series

%timeit df['a'].min()

6.68 ms ± 121 µs per loop

type(df['a'].values)

numpy.ndarray

%timeit df['a'].values.min()

696 µs ± 18 µs per loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...