Быстрый способ локализовать время в Python для большого набора данных? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть объекты datetime в качестве индексов в кадре данных pandas, которые я хотел бы локализовать без использования цикла for. Вот код: (данные - это фрейм данных)

from pytz import timezone
utc = timezone('UTC')
utc_times = [utc.localize(entry) for entry in data.index]
cst_times = [entry.astimezone(timezone('US/Central')) for entry in utc_times]
data.index = cst_times

По мере роста набора данных это происходит медленно. Есть ли способы ускорить это?

1 Ответ

0 голосов
/ 27 апреля 2018

Если ваш индекс DateTimeIndex, вы должны сделать это:

import pandas as pd
times = pd.DatetimeIndex(start='2018-04-26 11:00:00', periods=50000, freq='1h')
data = pd.DataFrame(index=times)
utc_times = data.index.tz_localize('UTC')
cst_times = utc_times.tz_convert('US/Central')
data.index = cst_times

Этот метод более чем в 1000 раз быстрее для индекса в 50 000 раз. Смотрите ниже:

%% time
# Original method
utc_times = [utc.localize(entry) for entry in data.index]
cst_times = [entry.astimezone(timezone('US/Central')) for entry in utc_times]
data.index = cst_times

CPU times: user 1.28 s, sys: 38.2 ms, total: 1.32 s
Wall time: 1.49 s

-

%%time
# New method
utc_times = data.index.tz_localize('UTC')
cst_times = utc_times.tz_convert('US/Central')
data.index = cst_times

CPU times: user 354 µs, sys: 9 µs, total: 363 µs
Wall time: 389 µs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...