使用strptime,一天超出了一个月的范围

时间:2015-05-10 19:22:54

标签: python datetime pandas dataframe

我在数据框中有很长的日期列表,需要转换为日期时间,日期格式为"%d%m%Y" ,我申请{ {1}},工作正常,直到" 3122012" 为止,该日期应为 datetime.datetime(2012,12,3,0,0),而是抛出错误信息:

datetime.strptime(x,'%d%m%Y')

这显然是因为程序认为它是31/2/2012,并不存在。有什么建议可以避免这些问题吗?谢谢!

1 个答案:

答案 0 :(得分:3)

这只是一个更大问题的一部分:你的格式本质上是模棱两可的。 *

例如,1-11-201211-1-2012都将格式化为1112012。那么,你打算怎么解析呢?您可以为此创建并实施消歧规则,但无论您选择哪一个,您的系统都无法再表示另一个日期。

如果您对此感到满意,那么您为消除歧义1112012而实施的任何规则也会自动处理3122012。例如:

def parse_dmy(s):
    if len(s) == 6: s = '0' + s[0] + '0' + s[1:]
    elif len(s) == 7: s = '0' + s # or s[0] + '0' + s[1:]
    return datetime.strptime(x, '%d%m%Y')

我选择了'0' + s规则而不是s[0] + '0' + s[1:]规则,因为前者为此示例提供了03-12-2012,而后者为您提供了31-02-2012。但是,同样,这两条规则都不适用于所有价值观。

*此外,%d%m明确表示" 0-padded",因此您的字符串在技术上无效......但大多数平台都对非填充数字感到满意例如,%d-%m-%Y - 我相信POSIX要求他们感到高兴,Windows很高兴,你还关心其他非POSIX平台吗?无论如何,如果不是因为没有办法明确地将你的字符串转换成有效格式的问题,那只会是一个小问题。