我试图通过同一数据框的另一列中包含的值来增加pandas数据框中的日期,如下所示
loans['est_close_date'] = loans['dealdate'] + loans['tenor_weeks'].apply(lambda x: dt.timedelta(weeks =x))
但我一直收到错误:
" timedelta周组件的不支持类型:numpy.int64"错误。
另一方面,这样的结构
loans['est_close_date'] = loans['dealdate'] + loans['tenor_weeks'].apply(lambda x: dt.timedelta(weeks =1)*x)
工作得很好。我无法理解第一种方法的错误。
tenor_weeks
列中没有缺失值。
提前谢谢!
答案 0 :(得分:2)
对我来说,你的解决方案完美无缺,可能需要升级pandas / python。
我使用to_timedelta
添加纯大熊猫解决方案:
rng = pd.date_range('2017-04-03', periods=10)
loans = pd.DataFrame({'dealdate': rng, 'tenor_weeks': range(1,11)})
print (loans)
dealdate tenor_weeks
0 2017-04-03 1
1 2017-04-04 2
2 2017-04-05 3
3 2017-04-06 4
4 2017-04-07 5
5 2017-04-08 6
6 2017-04-09 7
7 2017-04-10 8
8 2017-04-11 9
9 2017-04-12 10
loans['est_close_date'] = loans['dealdate'] + loans['tenor_weeks'].apply(lambda x: dt.timedelta(weeks =x))
loans['est_close_date1'] = loans['dealdate'] + loans['tenor_weeks'].apply(lambda x: dt.timedelta(weeks =1)*x)
loans['est_close_date2'] = loans['dealdate'] + pd.to_timedelta(loans['tenor_weeks'],unit='w')
print (loans)
dealdate tenor_weeks est_close_date est_close_date1 est_close_date2
0 2017-04-03 1 2017-04-10 2017-04-10 2017-04-10
1 2017-04-04 2 2017-04-18 2017-04-18 2017-04-18
2 2017-04-05 3 2017-04-26 2017-04-26 2017-04-26
3 2017-04-06 4 2017-05-04 2017-05-04 2017-05-04
4 2017-04-07 5 2017-05-12 2017-05-12 2017-05-12
5 2017-04-08 6 2017-05-20 2017-05-20 2017-05-20
6 2017-04-09 7 2017-05-28 2017-05-28 2017-05-28
7 2017-04-10 8 2017-06-05 2017-06-05 2017-06-05
8 2017-04-11 9 2017-06-13 2017-06-13 2017-06-13
9 2017-04-12 10 2017-06-21 2017-06-21 2017-06-21