我有一个数据框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
的新列。有人可以让我知道我哪里出了问题。
谢谢
答案 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