timedelta不支持的类型

时间:2017-07-07 08:36:03

标签: python pandas numpy

我试图通过同一数据框的另一列中包含的值来增加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列中没有缺失值。

提前谢谢!

1 个答案:

答案 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