Нарезка/усечение TimeIndexed DataFrame вызывает KeyError

Я запускаю множество фреймов данных с индексом даты и времени через функцию, в которой я нарезаю фрейм данных на основе начального и конечного периода. Хотя одна и та же функция работает нормально для многих фреймов данных, на некоторых она вызывает необъяснимую ошибку KeyError. Данные в кадрах данных идентичны с точки зрения типов данных, столбцов и форматирования. Вот пример KeyError:

Выдержка DataFrame, которая вызывает ошибку:

>> df_boiler_temp
>> @log_date @tariff_indicator  #text                                   
2017-04-23 00:12:48.802              none   65.0
2017-04-23 00:19:00.223              none   64.0
2017-04-23 00:24:02.544              none   63.0
2017-04-23 00:29:20.766              none   62.0
2017-04-23 00:35:00.088              none   61.0
2017-04-23 00:41:00.666              none   60.0
2017-04-23 00:46:00.632              none   59.0
2017-04-23 00:53:38.935              none   58.0
2017-04-23 00:59:21.152              none   57.0
2017-04-23 01:05:59.926              none   56.0
2017-04-23 01:09:58.652              none   65.0
2017-04-23 01:11:00.651              none   66.0
2017-04-23 01:14:10.577              none   67.0
2017-04-23 01:19:58.829              none   66.0
2017-04-23 01:28:00.635              none   65.0

Код, который вызывает KeyError

df = df_boiler_temp.truncate(before=row['start'], after=row['end'])

(Как и эта строка, которая по существу идентична

df = df_boiler_temp[row['start']: row['end']]

)

Возникающее исключение:

KeyError: 1492909671481000000L

Что переводится как 2017-04-23 01:07:51.481000 в записи даты и времени.

>> row['start']
>> 2017-04-23 01:07:51.481000

>> row['end']
>> 2017-04-23 02:24:07.953000

Я не понимаю, почему усечение с этими значениями вызовет ошибку KeyError, когда поднимаемая ошибка KeyError идеально ложится между датами, присутствующими в кадре данных. Есть идеи, как я могу это решить?


person k88    schedule 15.06.2017    source источник
comment
попробуйте преобразовать дату начала и окончания в формат str: Используя pd.Timestamp('2006-11-16 18:30:00').strftime('%Y-%m-%d %H:%M:% S') и попробуйте нарезать.   -  person Anup    schedule 15.06.2017


Ответы (1)


Я не понимаю почему, но я нашел это, указывающее, что набор данных не сортируется. Хотя, насколько я проанализировал набор данных, он уже отсортирован, но следующая строка, похоже, помогла:

df = df_boiler_temp.sort_index().truncate(before=row['start'], after=row['end'])

РЕДАКТИРОВАТЬ: кажется, что мой набор данных был скопирован и добавлен к исходному набору данных. Поэтому было трудно обнаружить дубликаты.

person k88    schedule 15.06.2017