Более быстрая загрузка csv с индексом datetime pandas
Я часто повторяю данные о финансовых ценах, хранящиеся в файле csv. Как доступность использования объектов pandas datetime для подмножества и организации данных, когда весь мой анализ выполняется относительно времени.
Моя проблема в том, что когда я читаю файл в памяти своего компьютера, bothe аргумент parse_dates
, поставленный top pandas.read_csv()
, а pandas.to_datetime()
невероятно дорогостоящий.
Кто-нибудь знает лучший способ иметь дело с отметками времени в python, которые могут быть оптимизированы для запуска многих файлов, которые необходимо загрузить в память?
%timeit pd.read_csv("C:\\Users\\rgalbo\\Desktop\\Equity\\Data\\sp - working data\\30min--Adj\\AAPL_24.csv",index_col=[0])
10 loops, best of 3: 112 ms per loop
с parse_date = True
%timeit pd.read_csv("C:\\Users\\rgalbo\\Desktop\\Equity\\Data\\sp - working data\\30min--Adj\\AAPL_24.csv",index_col=[0],parse_dates=True)
1 loops, best of 3: 7.5 s per loop
Ответы
Ответ 1
после тестирования нескольких параметров загрузки и разбора файла csv с 13,811,418 строк, имеющих 98 уникальных значений даты, мы пришли к приведенному ниже фрагменту и выяснили, что если мы передадим параметр format
с предопределенным форматом даты ( "% m/% d/% Y" в нашем случае), мы могли бы достичь 2.52 s
с помощью Pandas.0.15.3.
def to_date(dates, lookup=False, **args):
if lookup:
return dates.map({v: pd.to_datetime(v, **args) for v in dates.unique()})
return pd.to_datetime(dates, **args)
- также использовать coerce = True (или coarse = 'raise' в более поздних версиях) для включения проверки формата даты, в противном случае значения ошибок сохраняются как строковое значение и приводят к ошибке, когда любая другая дата- временная операция выполняется в столбце dataframe.