You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中正确将字符串日期'12/7/21'转为'2021-07-12'?

问题:将'12/7/21'格式字符串转换为'2021-07-12'日期对象

需要把类似12/7/21的日期字符串转换为2021-07-12格式的日期对象,原StackOverflow上的解决方案存在问题,具体情况如下:

原错误代码示例:

# StackOverflow上的建议解决方案
import pandas as pd
df = pd.DataFrame({'Date':['15/7/21']})
df['Date']
# 输出:0    15/7/21,dtype: object
pd.to_datetime(df['Date'].astype('datetime64'),format='%d/%m/%y')
# 输出:0   2021-07-15,dtype: datetime64[ns]

问题根源是代码中多了一步.astype('datetime64')——这会让pandas先自动解析日期字符串,后续传入的format='%d/%m/%y'参数完全失效。当输入改为12/7/21时,pandas会默认按月/日/年解析,得到错误结果:

df = pd.DataFrame({'Date':['12/7/21']})
pd.to_datetime(df['Date'].astype('datetime64'),format='%d/%m/%y')
# 输出:0   2021-12-07,dtype: datetime64[ns]

正确解决方案

以下几种方法都能实现类似R中lubridate::dmy(df$Date)的效果:

  1. 直接指定format参数(推荐)
    去掉多余的.astype('datetime64'),直接用pd.to_datetime并明确日期格式:
import pandas as pd
df = pd.DataFrame({'Date':['12/7/21']})
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%y')
# 输出:0   2021-07-12,符合预期
  1. 使用dayfirst参数
    如果不确定日期格式,但明确日期在前、月份在后,可以用dayfirst=True让pandas优先解析第一个数字为日期:
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
  1. 利用dateutil.parser解析
    借助dateutil库的解析器,同样指定dayfirst=True:
from dateutil.parser import parse
df['Date'] = df['Date'].apply(lambda x: parse(x, dayfirst=True))

内容的提问来源于stack exchange,提问作者Amin Shn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:45:58