pandas转换字符串日期为datetime类型报错及结果异常问题求解
Pandas字符串日期转换异常解决方案
问题1、2(day返回值异常)解决
核心原因是你指定的format占位符顺序和实际日期字符串的字段顺序不匹配:
- 先打印原始数据样本确认实际格式
# 输出前5条原始time列内容,确认年、月、日的排列顺序 print(new_data['time'].head().tolist())
- 按实际顺序编写format参数:
比如你输出的样本是['2024-06-08 09:00:00', '2024-06-09 10:00:00'],顺序为年-月-日,对应format为%Y-%m-%d %H:%M:%S,解析后直接用.dt.day获取日即可,无需用apply遍历:
new_data['parsed_time'] = pd.to_datetime(new_data['time'], format='%Y-%m-%d %H:%M:%S') new_data['day'] = new_data['parsed_time'].dt.day
问题3(拼接后转换报错ValueError)解决
你拼接后的字符串格式为31/08/21;00:00:00,和你指定的%Y/%m/%d;%H:%M:%S存在两处不匹配:
- 字段顺序错误:你拼接的是
日/月/年,不是年/月/日 - 年占位符错误:拼接的年是两位数字
21,要用%y匹配,%Y仅匹配四位年份
修改format参数即可:
new_data['parsed_datetime'] = pd.to_datetime(new_data['time'], format='%d/%m/%y;%H:%M:%S')
校验步骤
解析完成后可通过以下代码对比原始值和解析值,确认转换正确:
print(pd.concat([ new_data['time'].head(), new_data['parsed_datetime'].dt.strftime('%Y-%m-%d %H:%M:%S').rename('parsed_result').head() ], axis=1))
内容的提问来源于stack exchange,提问作者realbro
相关产品推荐
相关产品推荐

