如何将Pandas列中多种格式日期时间字符串批量转换为pd.timestamp
解决方案
你的代码返回NaT是因为指定了固定的%d/%m/%Y %H:%M格式,只有同时包含日期、小时、分钟的数据才能被正常解析,缺少时分、多了秒、年份为两位的字符串都会匹配失败。
方法1:自动推断格式(最简单)
不指定固定格式,开启dayfirst=True适配你「日/月/年」的日期顺序,pandas会自动匹配不同的日期格式:
import pandas as pd # 示例数据 datetimes= { 'DATETIMEOFCALL': [ '12/10/2021 15:30', '10/12/2021', '10/12/21', '12/10/2021 14:59:59', '12/10/2021 14:59:69', None, ] } df = pd.DataFrame(datetimes) # 日期转换 df['DATETIMEOFCALL'] = pd.to_datetime(df['DATETIMEOFCALL'], dayfirst=True, errors='coerce')
解析结果说明:
- 合法的日期字符串都会被转为Timestamp格式,缺失时分的会默认补
00:00:00,两位年默认识别为20xx年 - 秒数为69的无效时间、空值会被转为NaT,这是日期类型的空值标识,属于预期结果
方法2:指定多格式匹配(准确率更高)
如果担心自动推断出现日期顺序识别错误,可以显式传入所有可能的格式列表(需要pandas 1.4及以上版本):
formats = ['%d/%m/%Y %H:%M:%S', '%d/%m/%Y %H:%M', '%d/%m/%Y', '%d/%m/%y'] df['DATETIMEOFCALL'] = pd.to_datetime(df['DATETIMEOFCALL'], format=formats, errors='coerce')
pandas会按顺序尝试匹配每个格式,直到找到符合的规则完成转换。
内容的提问来源于stack exchange,提问作者banana_99
相关产品推荐
相关产品推荐

