Подтвердить что ты не робот

Pandas reindex DataFrame с объектами datetime

Можно ли переиндексировать pandas DataFrame с помощью столбца, состоящего из объектов datetime?

У меня есть DataFrame df со следующими столбцами:

Int64Index: 19610 entries, 0 to 19609
Data columns:
cntr                  19610  non-null values  #int
datflt                19610  non-null values  #float
dtstamp               19610  non-null values  #datetime object
DOYtimestamp          19610  non-null values  #float
dtypes: int64(1), float64(2), object(1)

Я могу легко перевернуть df вдоль DOYtimestamp с помощью: df.reindex(index=df.dtstamp) и DOYtimestamp имеет следующие значения:

>>> df['DOYtimestamp'].values
    array([ 153.76252315,  153.76253472,  153.7625463 , ...,  153.98945602,
    153.98946759,  153.98947917])

но я бы хотел переиндексировать DataFrame вдоль dtstamp, который состоит из объектов datetime, чтобы я генерировал разные временные метки непосредственно из индекса. Столбец dtstamp имеет значения, которые выглядят так:

 >>> df['dtstamp'].values
     array([2012-06-02 18:18:02, 2012-06-02 18:18:03, 2012-06-02 18:18:04, ...,
     2012-06-02 23:44:49, 2012-06-02 23:44:50, 2012-06-02 23:44:51], 
     dtype=object)

Когда я пытаюсь и reindex df вдоль dtstamp, я получаю следующее:

>>> df.reindex(index=df.dtstamp)
    TypeError: can't compare datetime.datetime to long

Я просто не уверен, что мне нужно сделать, чтобы индекс был типа datetime. Любые мысли?

4b9b3361

Ответ 1

Похоже, вы не хотите переиндексации. Несколько смутно reindex не для определения нового индекса; скорее, он ищет строки с указанными индексами. Поэтому, если у вас есть DataFrame с индексом [0, 1, 2], то выполнение reindex([2, 1, 0]) вернет строки в обратном порядке. Выполнение чего-то типа reindex([8, 9, 10]) не создает новый индекс для строк; скорее, он вернет DataFrame с значениями NaN, так как нет строк с индексами 8, 9 или 10.

Кажется, что вы хотите просто сохранить одни и те же строки, но сделать для них совершенно новый индекс. Для этого вы можете просто присвоить индекс напрямую. Поэтому попробуйте сделать df.index = df['dtstamp'].