转换含小数小时的日期字符串为pandas datetime出现ParserError如何解决
问题解决方法
报错原因
你传入的date列字符串包含非标准时间格式:空格后的值为小数形式的小时数,不属于pd.to_datetime支持的默认解析格式,也无法通过常规的format参数直接适配,因此触发解析错误。
处理方案
先拆分字符串的日期部分和小数小时部分,分别转换后合并为完整的datetime类型:
import pandas as pd dfff = pd.DataFrame({'date': ['01-01-2016 0.55', '01-01-2016 1.26', '01-01-2016 4.51', '01-01-2016 7.43']}) # 方法1:拆分处理逻辑清晰,便于调试 # 拆分日期与小数小时 date_split = dfff['date'].str.split(' ', expand=True) # 转换日期部分为datetime,默认是日-月-年格式,如果是月-日-年可修改format参数为'%m-%d-%Y' date_part = pd.to_datetime(date_split[0], format='%d-%m-%Y') # 转换小数小时为时间偏移量 hour_offset = pd.to_timedelta(date_split[1].astype(float), unit='h') # 合并得到最终datetime列 dfff['datetime'] = date_part + hour_offset # 方法2:单行简化写法 # dfff['datetime'] = dfff['date'].apply(lambda x: pd.to_datetime(x.split()[0], format='%d-%m-%Y') + pd.to_timedelta(float(x.split()[1]), unit='h')) print(dfff)
运行后输出的转换结果示例:
| date | datetime |
|---|---|
| 01-01-2016 0.55 | 2016-01-01 00:33:00 |
| 01-01-2016 1.26 | 2016-01-01 01:15:36 |
| 01-01-2016 4.51 | 2016-01-01 04:30:36 |
| 01-01-2016 7.43 | 2016-01-01 07:25:48 |
内容的提问来源于stack exchange,提问作者Mahafuzur Rahaman
相关产品推荐
相关产品推荐

