python在数据框日期列和参考日期之间找到时间

时间:2018-10-05 09:46:11

标签: python pandas

我有一个数据框df,其中有一个'date of birth'列,其头部看起来像:

            DoB
0    19/12/1973
1    22/05/1969
2    23/09/1959
3    04/08/1963
4    25/03/1962

我正在尝试创建一个新列,该列的年限与设置为:2017-03-31且类型为<class 'datetime.date'>的引用日期变量refDate之间的年数相同。我正在寻找df数据框中的新列

Age
43
47
57
53
55

我尝试了以下方法:

df['Age'] = df.loc[(refDate - ['Date of birth']).years]

但无法获得名为Age的新列。有人可以让我知道我哪里出了问题。

谢谢

3 个答案:

答案 0 :(得分:3)

您的rake assets:precompile RAILS_ENV=production rake aborted! Uglifier::Error: fs redeclared 行不正确,请使用以下命令获取所需的输出,首先从df['Age']中减去df['DoB'],然后除以timedelta,将天转换为年为:

refDate

或者,如果要整数年份,则:

df['DoB'] = pd.to_datetime(df['DoB'])
df['Age'] = (pd.to_datetime('2017-03-31') - df['DoB'])/np.timedelta64(1, 'Y')

print(df)
         DoB        Age
0 1973-12-19  43.280834
1 1969-05-22  47.858614
2 1959-09-23  57.520688
3 1963-04-08  53.980575
4 1962-03-25  55.018241

答案 1 :(得分:2)

请勿使用.loc。使用.loc,您可以按标签或布尔数组访问一组行和列。

答案 2 :(得分:0)

使用apply来获取以年为单位的日期差异

df.DoB.apply(lambda x: (refDate - x).days // 365)

演示

In [1]: df.DoB = pd.to_datetime(df.DoB)

In [2]: refDate = datetime(2017, 3, 31)

In [3]: df['age'] = df.DoB.apply(lambda  x: (refDate - x).days // 365)

In [4]: df
Out[4]:
         DoB  age
0 1973-12-19   43
1 1969-05-22   47
2 1959-09-23   57
3 1963-04-08   54
4 1962-03-25   55