2014-08-29 5 views
3

Есть ли предпочтительный способ преобразования pandas DateTimeIndex в столбец целых чисел YYYYMMDD? Мне нужен целочисленный формат YYYYMMDD для старого хранилища обратно в ранее существующую таблицу SQLite, которая предполагает, что даты являются целыми числами.Преобразование Pandas DateTimeIndex в YYYYMMDD целое число?

Pandas 'to_sql() с ошибкой «sqlite3.InterfaceError» при использовании аромата и индекса SQLite = True. Очевидно, использование аромата SQLalchemy может преобразовать DateTimeIndex в строку, но снова мне нужно, чтобы это было как целое число YYYYMMDD.

В то время, как представляется, to_datetime() и to_pydatetime() функции, как представляется, не быть from_datetime() функция.

ответ

1

Я смущен тем, что вы хотите. Вы пытаетесь преобразовать DateTimeIndexв форматYYYYMMDD; зачем вам нужен метод from_datetime?

Во всяком случае, вы можете либо карта/транслировало Timestamp.strftime функции панды над ним, или использовать что to_pydatetime функции, которую вы нашли, а затем сопоставить функцию Python datetime.strftime над результирующим массивом.

Очевидно, использование аромата SQLalchemy может преобразовать DateTimeIndex в строку, но снова мне нужно, чтобы это было как целое число YYYYMMDD.

Это легко. Учитывая строку YYYYMMDD, чтобы преобразовать ее в целое число, вы просто вызываете на нее int или, если она находится в массиве Pandas/Numpy, вы отображаете или транслируете по ней int или, что еще проще, просто введите свой dtype.

Например:

>>> dti = pd.DatetimeIndex(['2014-08-31', '2014-09-01']) 
>>> pdt = dti.to_pydatetime() 
>>> sdt = np.vectorize(lambda s: s.strftime('%Y%m%d'))(pdt) 
>>> idt = sdt.astype('I4') 
>>> idt 
array([20140831, 20140901], dtype=uint32) 

(я не утверждаю, что это является наиболее эффективным и наиболее читаемым способом преобразования DateTimeIndex в массив YYYYMMDD целых чисел, так что это выполнимо с функциями, которые вы появляетесь чтобы узнать об этом, и если это не то, что вы хотите, ваш вопрос не имеет смысла.)

+0

Спасибо, работает на меня. Я просто думал, что функция 'from_datetime' поможет упростить/оптимизировать преобразование из массива DateTimeIndex в numpy integer или другой тип данных, который пользователь может использовать. TMI, я думаю, в любом случае спасибо за пример. – bazel

+0

@bazel: А вы имеете в виду 'from_datetime' на' np.array'? Ну, numpy пишет, что как .astype ('I4') ', с несколькими ярлыками типа' .asi8() '(вы должны указать тип' to' где-то, вам не нужно указывать 'from' type, потому что массив уже знает, какой dtype это ...). Проблема в том, что вы пытаетесь преобразовать в нестандартный формат. Вы можете просто перейти от 'Timestamp' к' int', но затем вы получите наносекунды из эпохи Unix, а не 'YYYYMMDD'. Вы можете перейти от 'Timestamp' к' str', но тогда вы получите ISO/RFC-формат, 'YYYY-MM-DDTHH: MM: SS'. – abarnert

Смежные вопросы