【问题标题】:how to make interpret date as 3 12 not 31 2 in ddmmyyyy format如何以 ddmmyyyy 格式将日期解释为 3 12 而不是 31 2
【发布时间】:2021-05-08 09:21:40
【问题描述】:

我的日期格式在 pandas 列中采用 11122020 (ddmmyyyy) 格式。

我用

datapdf["wholetime"]=pd.to_datetime(datapdf["wholetime"],format='%d%m%Y)  

转换为时间并按时间进行处理。

最近我的代码在日期 3122020 上失败了

ValueError: day is out of range for month

python 解释为 31 2 2020 而不是 3 12 2020 导致错误。有人有这个解决方案吗?

【问题讨论】:

    标签: python pandas date datetime strftime


    【解决方案1】:

    一种方法是使用 str.zfill 确保日期为 8 位数字:

    s = pd.Series(["11122020", "3122020"])
    pd.to_datetime(s.str.zfill(8), format="%d%m%Y")
    

    输出:

    0   2020-12-11
    1   2020-12-03
    dtype: datetime64[ns]
    

    请注意,此答案仅涉及当天缺少 0。它将无法解析更多模棱两可的项目,例如 332020,其中 month 部分也需要标题 0。

    【讨论】:

    • 现在'572020' 会有问题,无论如何都赞成。修改将很容易。另一方面,这将/不应该是一个问题,否则1112020 将是模棱两可的。
    • @QuangHoang 是的。我会添加注释
    • '572020' 也是我关心的问题。幸运的是,他们发送的月份是零填充。 zfill 完美地帮助了我的情况.. 感谢您的帮助
    【解决方案2】:

    使用apply 的一点点新手方法我为日期创建了自定义解析器,如果您有其他格式,那么您可以根据您的日期格式调整函数,

    import pandas as pd
    data = {
        #assuming your dates are mix of ddmmyyyy,dmmyyyy,dmyyyy
        'date': ['11122020','3122020','572020','','222019','3112019']
    }
    
    df = pd.DataFrame(data)
    
    def parser(elem):
      res = ''
      if len(elem) > 7:
        res = elem
      elif len(elem) > 6:
        d = '0' + elem[0]
        m = elem[1:3]
        y = elem[3:]
        res = d+m+y
      elif len(elem) > 5:
        d = '0' + elem[0]
        m = '0' + elem[1]
        y = elem[2:]
        res = d+m+y
      else:
        res = ''
    
    
      return pd.to_datetime(res, format='%d%m%Y',errors='coerce')
    
    df['date'] = df['date'].apply(parser)
    df
    

    输出:

        date
    0   2020-12-11
    1   2020-12-03
    2   2020-07-05
    3   NaT
    4   2019-02-02
    5   2019-11-03
    

    【讨论】:

      猜你喜欢
      • 2016-02-22
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多