Более быстрая загрузка 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.