【问题标题】:Create a parse function for different date formats in Python在 Python 中为不同的日期格式创建解析函数
【发布时间】:2015-07-04 14:47:02
【问题描述】:

我想创建一个能够识别两种不同格式的 lambda 解析函数

"2014-01-06 15:23:00"

"2014-01-06"

这个想法是使用这个函数来创建一个 pandas 数据框,但在某些值中缺少小时

这是我的第一个想法

parse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S') if x is True else pd.datetime.strptime(x, '%Y-%m-%d')

看来x是True是不正确的

有什么想法吗??

【问题讨论】:

  • 你可以做… if len(x) > 10 else …
  • 作为建议,由于您需要处理函数中的一些异常和错误,我认为lambda 不是此任务的正确选择!因此,当您使用 def 时,所有关系都将打开!
  • 谢谢戳它工作

标签: python if-statement lambda date-parsing


【解决方案1】:

dateutil 有一个可以处理多种格式的解析器:

>>> dateutil.parser.parse('2015-07-04')
datetime.datetime(2015, 7, 4, 0, 0)

>>> dateutil.parser.parse('2015-07-04 11:23:00')
datetime.datetime(2015, 7, 4, 11, 23)

>>> dateutil.parser.parse('2015-07-04T11:23:56')
datetime.datetime(2015, 7, 4, 11, 23, 56)

即使是这样的非 iso 格式

>>> dateutil.parser.parse('5-6-15')
datetime.datetime(2015, 5, 6, 0, 0)

【讨论】:

  • 谢谢迈克。是的,我知道,但是使用 dd-mm-yy 格式不会产生正确的输出结果。在您的示例中 ('5-6-15') 给出 datetime.datetime(2015, 5, 6, 0, 0) 而不是 (2015, 6, 5, 0, 0)
  • dd-mm-yy 通常不是日期的书写方式(至少在美国不是)。通常,如果您将年份放在其月-日-年的末尾。
  • 当然,但我不在美国。我在欧洲,所以我的输入是 dd-mm-yyyy en.wikipedia.org/wiki/Date_format_by_country
  • 那么你可能需要创建一个特殊情况,我认为 parse 函数不适合这种格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多