Доступ к данным с помощью Pandas eval () на порядки медленнее, чем обычный pandas - PullRequest
0 голосов
/ 05 августа 2020

Почему доступ к данным pandas, кажется, работает в 1000 раз медленнее, когда он выполняется внутри eval()?

Пример :

import pandas as pd
import numpy as np
import time

df = pd.DataFrame(np.array([[1, 2, 3]]), columns=['a', 'b', 'c'])

Без eval():

tic = time.perf_counter()

for i in range(100):
    df['a']
    
toc = time.perf_counter()
print(f"Executed in {toc - tic:0.4f} seconds")
#Executed in 0.0002 seconds

Использование pd.eval:

tic = time.perf_counter()

for i in range(100):
    pd.eval("df['a']")
    
toc = time.perf_counter()
print(f"Executed in {toc - tic:0.4f} seconds")
#Executed in 0.9919 seconds

Использование loc и iloc не имеет значения.

Производительность также в значительной степени то же самое при доступе к большему количеству элементов.

  • df['a'] + df['b'] - 0,0115 секунды против 1,8803 секунды
  • df['a'] + df['b']+ df['c'] - 0,0259 секунды против 3,0085 секунды

Использование eval() непосредственно во фрейме данных, например df.eval('a = b + c'), делает его всего в 3-4 раза медленнее, чем версия без eval (в отличие от 100-1000 раз медленнее), но исходный вопрос остается.

...