【问题标题】:Pandas date formatting with different multiple date formats problems具有不同多种日期格式问题的 Pandas 日期格式
【发布时间】:2019-09-14 21:02:56
【问题描述】:

我正在尝试将我的数据框中的列转换为日期,这意味着生日。这些数据是在几年内以不同的格式手动捕获的。我无法让 Pandas 正确格式化整列。

格式包括:

YYYYMMDD
DDMMYYYY
DD/MM/YYYY
DD-MMM-YYYY (eg JAN)

我试过了

dates['BIRTH-DATE(MAIN)'] = pd.to_datetime(dates['BIRTH-DATE(MAIN)'])

但我得到了错误

ValueError: 19670314 年超出范围

不确定如何让它包含多种日期格式?

【问题讨论】:

  • 应该将像 19670304 这样的值解释为 4 月 3 日还是 3 月 4 日?
  • 19670304 应该是三月

标签: python pandas


【解决方案1】:

在我看来,pandas 在转换日期方面非常出色,但几乎不可能总是自动猜出正确的格式。使用 pd.to_datetime 和选项 errors='coerce' 并检查未手动转换的日期。

【讨论】:

    【解决方案2】:

    您可以创建自己的函数来处理这个问题。例如,类似:

    df = pd.DataFrame({'date': {0: '20180101', 1: '01022018', 2: '01/02/2018', 3: '01-JAN-2018'}})
    
    def fix_date(series, patterns=['%Y%m%d', '%d%m%Y', '%d/%m/%Y', '%d-%b-%Y']):
        datetimes = []
        for pat in patterns:
            datetimes.append(pd.to_datetime(series, format=pat, errors='coerce'))
        return pd.concat(datetimes, axis=1).ffill(axis=1).iloc[:, -1]
    
    df['fixed_dates'] = fix_date(df['date'])
    

    [出]

    print(df)    
    
              date fixed_dates
    0     20180101  2018-01-01
    1     01022018  2018-02-01
    2   01/02/2018  2018-02-01
    3  01-JAN-2018  2018-01-01
    

    【讨论】:

    • pd.to_datetime(s, format=pat, errors='coerce') 中的“s”是什么?
    • @ThelurkerLurker 道歉,它确实应该是 series 而不是 s。我更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多