Фрейм данных содержит 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, представляющем столбец, поэтому теряется при перестроении столбца таким образом.