Я обслуживаю запросы API с довольно жесткими требованиями к задержке, и данные, которые я хочу преобразовать, публикуются по одной строке за раз.Я был озадачен, увидев, что метод pandas read_csv занимает около 2 мс, от которого я не могу отказаться просто для загрузки данных.
Возможны ли дальнейшие улучшения в приведенном ниже коде, такие как аргумент I 'м, что бы ускорить процесс с таким размером данных?
from io import StringIO
import pandas as pd
import numpy as np
example_input = '1969,EH10,consumer'
Метод библиотеки панд с наилучшей оптимизацией, которую я мог найти, был со следующими аргументами:
%%timeit
s = StringIO(example_input)
df = pd.read_csv(s,
sep=',',
header=None,
engine='c',
names=['dob', 'postcode', 'contract'],
dtype=str,
compression=None,
na_filter=False,
low_memory=False)
, который локальновозвращает 1.75 ms ± 18.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Мне удалось значительно ускорить загрузку с помощью numpy, а затем создать фрейм данных:
%%timeit
s = StringIO(example_input)
a = np.genfromtxt(s, delimiter=',', dtype=str)
df = pd.DataFrame(a.reshape(1, -1),
columns=['dob', 'postcode', 'contract'])
, что дает 415 µs ± 10.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
, что более приемлемо для моего приложения.(Загрузка только в массив NumPy может быть выполнена за ~ 70,4 мкс без загрузки в информационный кадр, поэтому я могу в итоге работать с этим)
Однако возможно ли еще ускорить пример pd.read_csv
и если нет - может кто-нибудь помочь мне понять причины большой дельты здесь?