Неожиданное поведение при индексировании Pandas с помощью .loc - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть pandas фрейм данных, называемый data, с индексами даты и времени. Когда я пытаюсь проиндексировать данные по нескольким временам, возникает ошибка. В частности, код выглядит следующим образом:

times = data.index.values
data.loc[times]

, что вызывает ошибку

"None of [DatetimeIndex([       '1997-01-10 06:53:36', '1997-01-10 06:53:36.100000',\n               '1997-01-10 06:53:36.200000', '1997-01-10 06:53:36.300000',\n               '1997-01-10 06:53:36.400000', '1997-01-10 06:53:36.500000',\n               '1997-01-10 06:53:36.600000', '1997-01-10 06:53:36.700000',\n               '1997-01-10 06:53:36.800000', '1997-01-10 06:53:36.900000',\n               ...\n                      '1997-01-10 06:58:05', '1997-01-10 06:58:05.100000',\n               '1997-01-10 06:58:05.200000', '1997-01-10 06:58:05.300000',\n               '1997-01-10 06:58:05.400000', '1997-01-10 06:58:05.500000',\n               '1997-01-10 06:58:05.600000', '1997-01-10 06:58:05.700000',\n               '1997-01-10 06:58:05.800000', '1997-01-10 06:58:05.900000'],\n              dtype='datetime64[ns]', name='Time', length=2700, freq=None)] are in the [index]"

У меня проблемы с воспроизведением этой ошибки на простом кадре данных, который я сделал сам, как этот:

df = pd.DataFrame(data={'col1':[1,2,3]} , index =[np.datetime64('1997-01-10T06:53:36.000000000'),np.datetime64('1997-01-10T06:53:36.100000000'),np.datetime64('1997-01-10T06:53:36.100000000')] )
times = df.index.values
df.loc[times]

просто возвращает фрейм данных df.

Кроме того,

times = data.index
data.loc[times]

возвращает данные кадра данных, и циклическое прохождение по времени выглядит следующим образом:

times = data.index.values
for time in times:
    print(data.loc[time])

не приводит к ошибке.

ОБНОВЛЕНИЕ

Я нашел источник ошибки, время, когда я пытался индексировать, не имело информации о часовом поясе, и время в кадре данных было. Итак, это:

times = data.index.values
time_tz = pd.DatetimeIndex(times,name='Time',tz=pytz.utc)
data.loc[time_tz]

работает так, как я и ожидал.

Ошибка возникает только в том случае, если я пытаюсь индексировать по нескольким датам без времени, поэтому теперь мой вопрос: почему

times = data.index.values
for time in times:
    print(data.loc[time])

не вызывает ошибку?

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