Pandas中datetime字符串格式解析报错,请求解决方案
解决Pandas datetime格式解析报错问题
我的数据框中datetime字符串格式为5/23/2022 19:22:33,示例数据如下:
col 1 5/23/2022 19:23:12 2 5/23/2022 19:24:13 3 5/23/2022 19:24:49 4 5/23/2022 19:25:48
执行以下代码时出现解析报错:
raise ParserError("Unknown string format: %s", timestr)
dateutil.parser._parser.ParserError: Unknown string format **
执行的代码:
Z16.iloc[:, 2] = pd.to_datetime(Z16.columns[2]) Z16.iloc[:, 12] = pd.to_datetime(Z16.columns[12], infer_datetime_format= True) Tat_Time = Z16.iloc[:, 12]-Z16.iloc[:, 2] Z16['Tat_Time'] = Tat_Time
问题原因
代码核心错误是误将列名(Z16.columns[2]/Z16.columns[12])作为时间解析对象,而非列内的实际数据。iloc[:,2]指向第3列的所有行数据,但你赋值时用了列名,列名通常不是符合格式的时间字符串,因此触发解析错误。
解决方案
修改代码,针对列内数据进行解析,并明确指定时间格式以避免识别偏差:
# 解析第3列的时间数据,明确格式匹配你的时间字符串 Z16.iloc[:, 2] = pd.to_datetime(Z16.iloc[:, 2], format='%m/%d/%Y %H:%M:%S') # 解析第13列的时间数据 Z16.iloc[:, 12] = pd.to_datetime(Z16.iloc[:, 12], format='%m/%d/%Y %H:%M:%S') # 计算时间差并新增列 Tat_Time = Z16.iloc[:, 12] - Z16.iloc[:, 2] Z16['Tat_Time'] = Tat_Time
特殊情况处理
如果你的时间字符串包含两个空格(如5/23/2022 19:22:33),可以先统一空格数量再解析:
# 去除字符串中的多余空格,统一为单个空格 Z16.iloc[:, 2] = Z16.iloc[:, 2].str.replace(' ', ' ') Z16.iloc[:, 12] = Z16.iloc[:, 12].str.replace(' ', ' ') # 再执行时间解析 Z16.iloc[:, 2] = pd.to_datetime(Z16.iloc[:, 2], format='%m/%d/%Y %H:%M:%S') Z16.iloc[:, 12] = pd.to_datetime(Z16.iloc[:, 12], format='%m/%d/%Y %H:%M:%S')
内容的提问来源于stack exchange,提问作者Deva
相关产品推荐
相关产品推荐

