Проблема преобразования из серии в str на Python 2.7.4 Anaconda

import sys
sys.version

'2.7.8 |Anaconda 2.1.0 (64-разрядная версия)| (по умолчанию, 2 июля 2014 г., 15:12:11) [MSC v.1500 64 бит (AMD64)]'

from pandas import DataFrame,Series
import datetime

id = [199995,199996,199997]
hour = [14102101,14102102,14102103]
df = pd.DataFrame({'id':Series(id),'hour':Series(hour)})
kk=df.hour.apply(str)
df_dt=datetime.datetime.strptime(kk,"%y%m%d%H").date()

Ошибка типа: должна быть строкой, а не серией

Я получил эти данные из таблицы измерения времени из реляционной базы данных, поэтому я не могу сделать многое, чтобы изменить формат импорта. Как я могу устранить эту ошибку?

2 ответа

Решение

Вы проходите в kk на ваш strptime(...) который является серией, где он ожидает строку. Вы можете перебирать строки в серии, если хотите распечатать каждую из дат следующим образом:

for i in range(len(kk)):
    df_dt=datetime.datetime.strptime(kk[i],"%y%m%d%H")
    print(df_dt)

который даст вам

2014-10-21 01:00:00
2014-10-21 02:00:00
2014-10-21 03:00:00
2014-10-21 03:00:00

Тем не менее, я предполагаю, что вы хотите получить, поскольку вы не указали это в своем первоначальном вопросе.

редактировать

С использованием %timeit модуль работает в IPython Notebook for петля по сравнению с apply.(lambda ...) чуть более чем в 3 раза быстрее.

1000 loops, best of 3: 91.6 µs per loop
1000 loops, best of 3: 345 µs per loop
df['hour_dt']=df.hour.apply(lambda x:datetime.datetime.strptime(x.astype(str),"%y%m%d%H") )
Другие вопросы по тегам