我有一个日期2/1/2018
,该日期是我从excel工作表列中获取的。
我要检查此字符串的实际日期格式是什么。
我正在做以下事情:
try:
datetime.datetime.strptime(v, '%d/%m/%Y')
print ('date format is correct')
except :
print ("Incorrect data format, should be mm/dd/yyyy")
正在打印date format is correct
。
对于%m/%d/%Y
,这也是date format is correct
。
实际上,我在excel列2/1/2018
和2/13/2018
中有两个日期,并尝试使用
%Y-%m-%d
如果我删除了pandas.to_datetime(value,dayfirst=True,errors='coerce').dt.strftime("%Y-%m-%d").replace('NaT', '')
,那么它仅对这个excel有效,否则它是错误的。
,其中一个在dayfirst=True
中进行转换,另一个在2018-01-02
中进行转换。
如何确定实际的日期格式?
答案 0 :(得分:1)
如果我删除了
dayfirst=True
,那么它仅对此有效 擅长,其他是错误的。
嗯,是的,这正是您应该期望的 。如果您未指定dayfirst=True
,则是让熊猫使用自己的逻辑,这可能是在不考虑一致性的前提下将一种格式的优先级高于另一种格式。
如果您事先知道自己的格式
您应该通过明确指定日期格式来帮助熊猫。这也将带来性能优势。例如:
df['datetime'] = pd.to_datetime(df['datetime'], format='%m/%d/%Y', errors='coerce')\
.dt.strftime('%Y-%m-%d').fillna('')
如果您事先不知道自己的格式
尝试在单个日期通过try
/ except
执行此操作将不起作用。孤立地,任何函数如何知道2/1/2018
是2月1日还是1月2日?您需要明确指定格式的逻辑顺序,然后才能进行顺序检查。