如何在Pandas中将格式为‘2020-06-30 15:20:13.078196+00:00’的日期列转换为datetime类型?
解决Pandas日期格式转换错误的问题
看起来你遇到的核心问题是格式字符串和实际日期格式不匹配,咱们一步步来修正:
问题根源
你的日期字符串是2020-06-30 15:20:13.078196+00:00,但你之前用的格式里错误地用了T分隔日期和时间(比如%Y-%m-%dT%H:%M:%S),而实际数据里是空格分隔日期和时间;另外时区部分的格式符也不对,实际微秒后直接跟+00:00,不需要额外的点或冒号。
推荐解法(更高效的方式)
直接用Pandas内置的pd.to_datetime,比apply+strptime性能好很多,而且大部分时候能自动识别格式:
# 方法1:自动识别格式(推荐,Pandas会自动解析这种标准格式) df['date'] = pd.to_datetime(df['date_string']) # 方法2:指定精确格式(如果自动识别出错时用) df['date'] = pd.to_datetime(df['date_string'], format='%Y-%m-%d %H:%M:%S.%f%z')
如果一定要用datetime.strptime
修正格式字符串即可,注意日期和时间之间是空格,时区部分用%z直接匹配+00:00:
from datetime import datetime df['date'] = df['date_string'].apply(lambda s: datetime.strptime(s, '%Y-%m-%d %H:%M:%S.%f%z'))
排查格式不匹配的异常数据
如果还是有部分数据转换失败,可以加上errors='coerce'把不匹配的转为NaT(Pandas的缺失日期值),然后查看这些异常行:
df['date'] = pd.to_datetime(df['date_string'], format='%Y-%m-%d %H:%M:%S.%f%z', errors='coerce') # 输出转换失败的行,方便排查格式问题 print(df[df['date'].isna()])
内容的提问来源于stack exchange,提问作者NPD
相关产品推荐
相关产品推荐

