转换为“日期时间”类型时出现问题:“小时必须为 0..23”

2024-04-22

这些是我的 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 文件是here https://github.com/planetsig/ufo-reports/blob/master/csv-data/ufo-scrubbed-geocoded-time-standardized.csv.

我将其加载到数据框中。在列名称中'datetime',我有格式'object'。我尝试转换类型'object'进入类型'datetime'像这样 :

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

结果我得到这个错误:

ValueError: hour must be in 0..23

任何帮助将不胜感激!


显然问题是24:00,解为Series.str.split http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.split.html, dates 转换为to_datetime http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html and time by to_timedelta http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_timedelta.html并加在一起:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转换为“日期时间”类型时出现问题:“小时必须为 0..23” 的相关文章

随机推荐