Python格式化指定日期字符串时返回全NaT问题求助
问题排查与解决
核心问题分析
你遇到的NaT问题源于两处格式匹配错误:
- 末尾字符不匹配:日期字符串末尾是
' - '(减号后带空格),但格式字符串里写的是'-'(无空格),导致解析时无法完全匹配。 - 单数字日期/月份的格式符错误:指定
format时,%m要求两位月份数字(如04),但你的字符串是单数字4,直接用%m会匹配失败。
解决方案
方案1:修正格式字符串(区分操作系统)
根据你的操作系统选择对应格式符,匹配单数字日期/月份并修正末尾空格:
- Linux/macOS(Unix系统):
df['message_date'] = pd.to_datetime(df['message_date'], format='%-m/%-d/%y, %I:%M %p - ', errors="coerce")
- Windows系统:
df['message_date'] = pd.to_datetime(df['message_date'], format='%#m/%#d/%y, %I:%M %p - ', errors="coerce")
方案2:先清理字符串再解析(通用跨平台)
先移除字符串末尾的' - '冗余部分,再进行解析,避免平台差异问题:
# 清理末尾的' - ' df['message_date'] = df['message_date'].str.rstrip(' - ') # 转换为datetime类型 df['message_date'] = pd.to_datetime(df['message_date'], format='%m/%d/%y, %I:%M %p', errors="coerce")
验证方法
可以先取单个字符串测试,确认格式是否正确:
test_str = '4/20/22, 4:08 PM - ' clean_str = test_str.rstrip(' - ') print(pd.to_datetime(clean_str, format='%m/%d/%y, %I:%M %p')) # 输出应为:2022-04-20 16:08:00
内容的提问来源于stack exchange,提问作者Prakhar Agrawal
相关产品推荐
相关产品推荐

