Python 使用不同的多个日期格式设置日期格式问题

Python 使用不同的多个日期格式设置日期格式问题,python,pandas,Python,Pandas,我正在尝试将数据框中的一列转换为日期,即生日。这些数据是在数年内以不同的格式手动获取的。我无法让Pandas正确设置整个列的格式 格式包括: YYYYMMDD DDMMYYYY DD/MM/YYYY DD-MMM-YYYY (eg JAN) 我试过了 dates['BIRTH-DATE(MAIN)]=pd.to_datetime(dates['BIRTH-DATE(MAIN)')) 但是我得到了错误 值错误:19670314年超出范围 不知道如何才能使其包含多种日期格式?在我看来,熊猫在转换日

我正在尝试将数据框中的一列转换为日期,即生日。这些数据是在数年内以不同的格式手动获取的。我无法让Pandas正确设置整个列的格式

格式包括:

YYYYMMDD
DDMMYYYY
DD/MM/YYYY
DD-MMM-YYYY (eg JAN)
我试过了

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

但是我得到了错误

值错误:19670314年超出范围


不知道如何才能使其包含多种日期格式?

在我看来,熊猫在转换日期方面确实很好,但几乎不可能总是自动猜测正确的格式。使用
pd.to\u datetime
选项
errors='concurve'
并检查未手动转换的日期。

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

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'])
[外]


像19670304这样的值应该被解释为4月3日还是3月4日?19670304应该是Marchwhat's'in pd.to_datetime(s,format=pat,errors='concurve')?@lurkerlower道歉,它确实应该是
系列
,而不是
s
。我更新了我的答案
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