Python 如何将不同的日期格式转换为一种

Python 如何将不同的日期格式转换为一种,python,pandas,Python,Pandas,我的数据框在下面 我正在努力寻找年龄 customer_Id DOB 0 268408 1970-02-01 1 268408 1970-02-01 2 268408 1970-02-01 3 268408 1970-02-01 4 268408 1970-02-01 形状为207518 转换数据时,我得到的值错误:未转换的数据保留:5 下面是要转换为年龄的代码 def cal_age(dob=str): x = dt.datetime.strptime(

我的数据框在下面

我正在努力寻找年龄

customer_Id DOB
0   268408  1970-02-01
1   268408  1970-02-01
2   268408  1970-02-01
3   268408  1970-02-01
4   268408  1970-02-01
形状为207518

转换数据时,我得到的值错误:未转换的数据保留:5

下面是要转换为年龄的代码

def cal_age(dob=str):
    x = dt.datetime.strptime(dob, "%Y-%d-%m")
    y = dt.date.today()
    age = y.year - x.year - ((y.month, x.day) < (y.month, x.day))
    return age
试试这个代码

df['current_date']=pd.datetime.now()
df['age']=(df.current_date-pd.to_datetime(df.DOB)).dt.days/365

您可以更改使用datetimes的函数,也不需要转换为字符串:

def cal_age(x):
    y = dt.date.today()
    age = y.year - x.year - ((y.month, x.day) < (y.month, x.day))
    return age

df_n_4['DOB'] = pd.to_datetime(df_n_4['DOB'],errors='coerce')
df_n_4['Age'] = df_n_4.DOB.apply(cal_age)

我猜您在DOB列中有一个无效的日期时间值,在处理如何克服这种情况之前,您必须先处理该值。如果date列具有不同类型的日期格式,我是否需要执行try except?您可以使用pd.to_datetime with errors='concurve'将无效的日期时间值转换为toNaT,但这可能会在从当前日期进行减法时产生问题,因此,您可能希望通过一些插补来处理缺少的值,或者按照您认为最好的方式删除它们。pd.to_datetimedf['DOB'],errors='concurve'。这取决于最终目标
def cal_age(x):
    y = dt.date.today()
    age = y.year - x.year - ((y.month, x.day) < (y.month, x.day))
    return age

df_n_4['DOB'] = pd.to_datetime(df_n_4['DOB'],errors='coerce')
df_n_4['Age'] = df_n_4.DOB.apply(cal_age)