如何在熊猫上获得年龄和日期的年龄

Nab*_*zir 4 python datetime pandas python-dateutil relativedelta

这是我的数据

Customer_id    Date-of-birth
1              1992-07-02
2              1991-07-03
Run Code Online (Sandbox Code Playgroud)

这是我的代码

import datetime as dt
df['now'] = dt.datetime.now()
df['age'] = df['now'].dt.date - df['Date-of-birth']
Run Code Online (Sandbox Code Playgroud)

这是结果

Customer_id    Date-of-birth     age
1              1992-07-02        xxxx days
2              1991-07-03        xxxx days
Run Code Online (Sandbox Code Playgroud)

我想要的结果是

Customer_id    Date-of-birth     age
1              1992-07-02        26 years 22 days
2              1991-07-03        27 years 21 days
Run Code Online (Sandbox Code Playgroud)

只是让你现在,通过df.dtypes,Date-of-birth是一个对象,因为是基于下拉客户输入

我怎样才能做到这一点?我希望这个问题足够清楚

jez*_*ael 6

使用该解决方案使用自定义功能,因为它算不容易,因为飞跃年:

from dateutil.relativedelta import relativedelta

def f(end):
    r = relativedelta(pd.to_datetime('now'), end) 
    return '{} years {} days'.format(r.years, r.days)

df['age'] = df["Date-of-birth"].apply(f)
print (df)
   Customer_id Date-of-birth               age
0            1    1992-07-02  26 years 22 days
1            2    1991-07-03  27 years 21 days
Run Code Online (Sandbox Code Playgroud)


小智 5

输入:

import pandas as pd
import datetime as dt

now = dt.datetime.now()
for i in range(0, len(df)):
    diff = now - dt.datetime.strptime(df['Date-of-Birth'][i], '%Y-%m-%d')
    years = diff.days // 365
    days = diff.days - (years*365)
    df['age'][i] = str(years) + ' years ' + str(days) + ' days'

print(df)
Run Code Online (Sandbox Code Playgroud)

输出:

Customer_id     Date-of-Birth          age
    1            1992-07-04       26 years 25 days
    2            1991-07-04       27 years 26 days
Run Code Online (Sandbox Code Playgroud)