Преобразование даты и времени в индекс pandas

#python-2.7 #pandas

#python-2.7 #pandas

Вопрос:

Мой фрейм данных pandas структурирован следующим образом:

       date                        tag
0     2015-07-30 19:19:35-04:00   E7RG6
1     2016-01-27 08:20:01-05:00   ER57G
2     2015-11-15 23:32:16-05:00   EQW7G
3     2016-07-12 00:01:11-04:00   ERV7G
4     2016-02-14 00:35:21-05:00   EQW7G
5     2016-03-01 00:08:59-05:00   EQW7G
6     2015-06-19 07:15:06-04:00   ER57G
7     2016-09-08 18:17:53-04:00   ER5TT
8     2016-09-03 01:53:45-04:00   EQW7G
9     2015-11-30 09:31:02-05:00   ER57G
10    2016-03-03 22:28:26-05:00   ES5TG
11    2016-02-11 10:39:24-05:00   E5P7G
12    2015-03-16 07:18:47-04:00   ER57G
...

[11015 rows x 2 columns]
date    datetime64[ns, America/New_York]
tag                               object
dtype: object
 

Я пытаюсь установить столбец «дата» в качестве индекса:

 df = df.set_index(pd.DatetimeIndex(df['date']))
 

что приводит к следующей ошибке (с использованием pandas 0.19)

 File "pandas/tslib.pyx", line 3753, in pandas.tslib.tz_localize_to_utc (pandas/tslib.c:64516)
pytz.exceptions.AmbiguousTimeError: Cannot infer dst time from  Timestamp('2015-11-01 01:38:12'), try using the 'ambiguous' argument  
 

Я консультировался с этим, но я все еще не могу справиться с этой ошибкой. Например,

     df = df.set_index(pd.DatetimeIndex(df['date']), ambiguous='infer')
 

дает:

 File "pandas/tslib.pyx", line 3703, in pandas.tslib.tz_localize_to_utc (pandas/tslib.c:63553)
pytz.exceptions.AmbiguousTimeError: Cannot infer dst time from 2015-11-01 01:38:12 asthere are no repeated times
 

Будем признательны за любые советы о том, как преобразовать столбец datetime в индекс.

Комментарии:

1. не df.set_index(df['date'], inplace=True) будет просто работать?

2. Да! Это сработало отлично. Спасибо @EdChum.

Ответ №1:

Если у вас dtype уже есть столбец datetime for, вы можете просто вызвать set_index его без необходимости пытаться создать a DatetimeIndex из столбца:

 df.set_index(df['date'], inplace=True)
 

должно просто работать, dtype для индекса вынюхивается, поэтому здесь нет необходимости создавать индексный объект из серии / столбца.

Комментарии:

1. И в случае, если это еще не datetime, df.set_index(pd.to_datetime(df['date']), inplace=True) должно сработать 🙂