Проблема с преобразованием в тип datetime: «час должен быть в 0.23» - PullRequest
0 голосов
/ 13 марта 2019

Вот несколько примеров строк из моего CSV-файла:

10/10/1949 20:30,san marcos,tx,us,cylinder,2700,45 minutes,"This event took place in early fall around 1949-50. It occurred after a Boy Scout meeting in the Baptist Church. The Baptist Church sit",4/27/2004,29.8830556,-97.9411111
10/10/1949 21:00,lackland afb,tx,,light,7200,1-2 hrs,"1949 Lackland AFB&#44 TX.  Lights racing across the sky & making 90 degree turns on a dime.",12/16/2005,29.38421,-98.581082
10/10/1955 17:00,chester (uk/england),,gb,circle,20,20 seconds,"Green/Orange circular disc over Chester&#44 England",1/21/2008,53.2,-2.916667
10/10/1956 21:00,edna,tx,us,circle,20,1/2 hour,"My older brother and twin sister were leaving the only Edna theater at about 9 PM&#44...we had our bikes and I took a different route home",1/17/2004,28.9783333,-96.6458333

Полный CSV-файл: здесь .

Я загружаю его в кадр данных.В имени столбца 'datetime' у меня есть формат 'object'.Я пытался преобразовать тип 'object' в тип 'datetime' следующим образом:

df['datetime'] = pd.to_datetime(df.datetime)

В результате я получаю эту ошибку:

ValueError: hour must be in 0..23

Любая помощь будет оценена!

1 Ответ

2 голосов
/ 13 марта 2019

Очевидно, проблема - 24:00, решение - Series.str.split, date с, преобразованное в to_datetime и time в to_timedelta и сумма вместе:

print (df)
           datetime
0  10/10/1949 20:30
1  10/10/1949 21:00
2  10/10/1955 17:00
3  10/10/1956 24:00

df[['date','time']] = df['datetime'].str.split(expand=True)
df['datetime'] = (pd.to_datetime(df.pop('date'), format='%d/%m/%Y') + 
                  pd.to_timedelta(df.pop('time') + ':00'))
print (df)
             datetime
0 1949-10-10 20:30:00
1 1949-10-10 21:00:00
2 1955-10-10 17:00:00
3 1956-10-11 00:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...