Медленный pd.to_datetime () - PullRequest
       15

Медленный pd.to_datetime ()

0 голосов
/ 24 сентября 2018

Я читаю два типа CSV-файлов, которые очень похожи.Они примерно одинаковой длины, 20 000 строк.Каждая строка представляет параметры, записанные каждую секунду.Таким образом, первый столбец является отметкой времени.

  • В первом файле шаблон выглядит следующим образом: 2018-09-24 15: 38
  • Во втором файле шаблонявляется следующим: 2018-09-24 03:38:06 PM

В обоих случаях команда одинакова:

data = pd.read_csv(file)
data['Timestamp'] = pd.to_datetime(data['Timestamp'])

Я проверяю время выполнения для обоихстроки:

  • pd.read одинаково эффективен в обоих случаях
  • для выполнения второй строки кода требуется ~ 3-4 секунды

Единственная разница - шаблон даты.Я бы не подозревал об этом.Ты знаешь почему?Вы знаете, как это исправить?

1 Ответ

0 голосов
/ 24 сентября 2018

pandas.to_datetime чрезвычайно медленно (в некоторых случаях), когда требуется автоматический анализ дат.Поскольку кажется, что вы знаете форматы, вы должны явно передать их параметру format, что значительно улучшит скорость.

Вот пример:

import pandas as pd
df1 = pd.DataFrame({'Timestamp': ['2018-09-24 15:38:06']*10**5})
df2 = pd.DataFrame({'Timestamp': ['2018-09-24 03:38:06 PM']*10**5})

%timeit pd.to_datetime(df1.Timestamp)
#21 ms ± 50.4 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit pd.to_datetime(df2.Timestamp)
#14.3 s ± 122 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Это в 700 раз медленнее.Теперь укажите формат явно:

%timeit pd.to_datetime(df2.Timestamp, format='%Y-%m-%d %I:%M:%S %p')
#384 ms ± 1.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

pandas все еще анализирует второй формат даты медленнее, но это не так плохо, как это было раньше.

...