Почему приведение столбца временных меток панд преобразует их в объекты datetime.datetime (и почему они теряют свой часовой пояс)? - PullRequest
0 голосов
/ 24 мая 2018

Фрейм данных содержит 1 столбец меток времени и один столбец целых чисел (только для поездки - чтобы никто не думал, что это всего лишь серия).

import pandas as pd
df = pd.DataFrame({'A':[(pd.Timestamp.utcnow()+pd.Timedelta(hours=1)) for i in range(3)],
          'B':[i for i in range(3)]})

df

Дает ...

    A                                   B
0   2018-05-24 09:57:32.263331+00:00    0
1   2018-05-24 09:57:32.264331+00:00    1
2   2018-05-24 09:57:32.264331+00:00    2

Проверка столбца «А» показывает, что все значения являются метками времени.

set((type(t) for t in df['A']))
{pandas._libs.tslib.Timestamp}

Приведение всех столбцов к dtype = 'object' ... ( Почему я могу это сделать?Это происходит автоматически при объединении столбцов несовместимых типов, все становится объектом. Я заставляю его здесь показать, что происходит с содержимым столбца. )

df = pd.DataFrame({c:pd.Series(df[c].values, index=df.index, dtype='object') for c in df.columns})
df

Хмм ... это выглядитотличается.

    A                           B
0   2018-05-24 09:57:32.263331  0
1   2018-05-24 09:57:32.264331  1
2   2018-05-24 09:57:32.264331  2

Снова проверяя 'A' ...

set((type(t) for t in df['A']))
{datetime.datetime}

... показывает, что все метки времени в столбце A стали объектами datetime.datetime.
Почему панды решили не использовать свой собственный тип?

Хуже того, он потерял часовой пояс.Сейчас они все наивные часовые пояса.

(df['A'].iloc[0], df['A'].iloc[0].tzinfo)
(datetime.datetime(2018, 5, 24, 9, 57, 32, 263331), None)

Pandas 0.22 Python 3.6.3.

Как указал @ user2285236, проблема не в пандах, а в numpy.Вызов значений (df [c] .values) в серии меток времени извлекает базовый массив numpy.Но массив numpy - это не массив меток времени, это массив дат и времени без часовых поясов (numpy не делает часовые пояса).Информация о часовом поясе сохраняется в объекте серии Pandas, представляющем столбец, поэтому теряется при перестроении столбца таким образом.

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