2017-07-07 258 views
3

我试图通过包含在同一数据帧的像这样不支持的类型timedelta

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列中没有缺失值。

预先感谢您!

回答

2

对我来说,你的解决方案工作完美,可能需要升级熊猫/ 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 
+0

谢谢!熊猫'to_timedelta'也适合我。仍然不明白为什么标准timedelta不适用于Pandas数据框。我的Python和熊猫似乎是最新的。 – Sophia

+0

很高兴能帮到你。如果我的回答有帮助,请不要忘记[接受](http://meta.stackexchange.com/a/5235/295067) - 点击答案旁边的复选标记('✓')将其从灰色出来填补。谢谢。 – jezrael