Pandas.to_datetime无法识别日期字符串格式,自动转换混淆日/月
问题描述
我尝试将.txt文件中的数据转换为DataFrame用于分析,该文件数据格式如下:
DATE_TIME VELOC MEASURE [m/s] [l/h]
A 09.01.2023 12:45:20 ??? ???
A 09.01.2023 12:46:20 0,048 52,67
A 09.01.2023 12:47:20 0,049 53,77
A 09.01.2023 12:48:20 0,050 54,86
已成功将数据加载到DataFrame,并将测量值字符串转换为float类型,但执行代码:
volume_flow['DATE_TIME'] = pd.to_datetime(volume_flow['DATE_TIME'], format = '%d.%m.%Y %H:%M:S')
时出现错误:
ValueError: time data '09.01.2023 12:46:20' does not match format '%d.%m.%Y %H:%M:S' (match)
无法找出格式不匹配原因,此前用类似代码处理其他日期格式均正常;尝试format = '%dd.%mm.%yyyy %H:%M:S'也报错。若让pd.to_datetime自动转换,会混淆日和月(数据范围09.01-12.01,无法通过值区分)。
解决方法
问题核心是格式字符串的秒部分大小写错误:你用了大写的S,而Pandas日期格式符中,秒的正确标识是小写的%S。
修改后的正确代码:
volume_flow['DATE_TIME'] = pd.to_datetime(volume_flow['DATE_TIME'], format='%d.%m.%Y %H:%M:%S')
补充几个关键细节:
- Pandas的日期格式符大小写严格区分:年用
%Y(4位)、月%m(2位)、日%d(2位),小时%H(24小时制)、分钟%M、秒%S,不能随意修改大小写。 - 你尝试的
%dd.%mm.%yyyy是错误写法,格式符不需要重复字母,直接用%d.%m.%Y即可。 - 针对数据中存在
???这类无效时间值的情况,可添加errors='coerce'参数将其转为NaT(缺失时间值),避免转换中断:volume_flow['DATE_TIME'] = pd.to_datetime(volume_flow['DATE_TIME'], format='%d.%m.%Y %H:%M:%S', errors='coerce')
内容的提问来源于stack exchange,提问作者joyless_69
相关产品推荐
相关产品推荐

