Python 使用不同的多个日期格式设置日期格式问题
我正在尝试将数据框中的一列转换为日期,即生日。这些数据是在数年内以不同的格式手动获取的。我无法让Pandas正确设置整个列的格式 格式包括: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年超出范围 不知道如何才能使其包含多种日期格式?在我看来,熊猫在转换日
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