Pandas: установить локаль для фрейма данных с неоднозначным местным временем из CSV-файла - PullRequest
1 голос
/ 16 октября 2019

Я читаю CSV-файлы с неоднозначным местным временем - неоднозначно из-за перехода на летнее время.

Когда я применяю tz_localize() Я запускаю следующую ошибку:

AmbiguousTimeError: There are %i dst switches when there should only be 1.

Вот мой код для воспроизведения ошибки. Обратите внимание, что с 2 до 3 часов утра каждая дата и время дублируются из-за перехода на летнее время.

index = pd.DatetimeIndex(['2018-10-28 01:00:00', '2018-10-28 01:15:00',
                          '2018-10-28 01:30:00', '2018-10-28 01:45:00',
                          '2018-10-28 02:00:00', '2018-10-28 02:00:00',
                          '2018-10-28 02:15:00', '2018-10-28 02:15:00',
                          '2018-10-28 02:30:00', '2018-10-28 02:30:00',
                          '2018-10-28 02:45:00', '2018-10-28 02:45:00',
                          '2018-10-28 03:00:00', '2018-10-28 03:15:00',
                          '2018-10-28 03:30:00', '2018-10-28 03:45:00',
                          '2018-10-28 04:00:00'], freq='infer')

data = list(range(len(index)))

df = pd.DataFrame(data=data,index=index)
df.index = df.index.tz_localize('Europe/Berlin', ambiguous='infer')

Я не совсем понимаю, почему ошибка возникает даже с параметром ambiguous='infer'.
Должен ли мой фрейм данных каким-либо образом быть отсортирован?
Как создать отсортированные фреймы данных с помощью pd.read_csv()
Я хочу применить ambiguous='infer' относительно порядка файла CSV. Именно я имею в виду: порядок неоднозначного формата времени помогает различаться между летним и зимним временем.

Я был бы рад за помощь в решении и более широкое объяснение. Я не мог найти много о том, как порядок может играть роль во фреймах данных - иногда ли это?

Ответы [ 2 ]

0 голосов
/ 16 октября 2019
index.tz_localize('Europe/Berlin', ambiguous=np.array([True]*17))

Я думаю, что часть вашего времени dst должна быть выведена, но у вас есть дублирующийся индекс времени, приводящий к невозможности сделать вывод, используйте необязательный np.array, который будет работать

0 голосов
/ 16 октября 2019

Как вы сохранили ваши данные, просто недостаточно информации, чтобы определить, какое значение даты и времени относится к летнему времени, а какое к зимнему.

Наивным подходом было бы сказать, что у вас есть неоднозначные значения даты и времени, и просто установить ambiguous=True вместо ambiguous='infer' в последней строке:

df.index = df.index.tz_localize('Europe/Berlin', ambiguous=True)

Это будет происходить все время до3 часа утра назначить на летнее время, вместо того, чтобы разделять дублирующиеся значения между летним и зимним временем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...