Я пытаюсь преобразовать временные метки эпохи эпохи Панды в человеко-читаемые времена. Есть как минимум два очевидных способа сделать это: pd.DatetimeIndex
и pd.to_datetime()
. Они, кажется, работают совершенно по-разному:Pandas DatetimeIndex vs to_datetime несоответствия
In [1]: import pandas as pd
In [3]: nanos = pd.Series([1462282258000000000, 1462282258100000000, 1462282258200000000])
In [4]: pd.to_datetime(nanos)
Out[4]:
0 2016-05-03 13:30:58.000
1 2016-05-03 13:30:58.100
2 2016-05-03 13:30:58.200
dtype: datetime64[ns]
In [5]: pd.DatetimeIndex(nanos)
Out[5]:
DatetimeIndex([ '2016-05-03 13:30:58', '2016-05-03 13:30:58.100000',
'2016-05-03 13:30:58.200000'],
dtype='datetime64[ns]', freq=None)
С to_datetime()
, разрешение дисплея составляет миллисекунды, и .000
печатается на целых секунд. С DatetimeIndex
разрешение дисплея составляет микросекунды (что мне нравится), но десятичная часть полностью опускается на целых секунды.
Затем попробуйте преобразование часового пояса:
In [12]: pd.DatetimeIndex(nanos).tz_localize('UTC')
Out[12]:
DatetimeIndex([ '2016-05-03 13:30:58+00:00',
'2016-05-03 13:30:58.100000+00:00',
'2016-05-03 13:30:58.200000+00:00'],
dtype='datetime64[ns, UTC]', freq=None)
In [13]: pd.to_datetime(nanos).tz_localize('UTC')
TypeError: index is not a valid DatetimeIndex or PeriodIndex
Это странно: функции часового пояса не работают с обычной серией даты и времени, только с DatetimeIndex. Почему это так? Метод tz_localize()
существует и документируется здесь: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.tz_localize.html
Я пробовал Pandas 0.17.0 и 0.18.1 с теми же результатами.
Я не пытаюсь сделать фактический индекс, поэтому при прочих равных условиях я ожидал использовать to_datetime()
. Я просто не могу использовать методы часового пояса для работы с ним.
ОК, так что это работает: 'pd.to_datetime (NANOS) .dt.tz_localize ('UTC') dt.tz_convert ('US/Eastern')' - но документы для 'Series.tz_localize (.) ', похоже, вообще не упоминается' dt', так что это довольно непонятно. Спасибо за помощь специалиста. Вы знаете, как я могу заставить Pandas всегда печатать часть микросекунд, даже если она равна нулю? –
http://pandas.pydata.org/pandas-docs/stable/timeseries.html#time-date-components tons of docs – Jeff
Я надеялся на что-то похожее на 'pd.options.display.max_rows', который контролирует, как вещи печатаются без необходимости переопределять код печати. Наверное, мне не повезло. –