希望为当前日期与熊猫数据框月末之间的工作日生成数字。 例如。 26/06/2017 - 4,23 / 06/2017 - 5
我遇到麻烦,因为我一直遇到类型错误:
(?i:bob)
来自行:
TypeError: Cannot convert input to Timestamp
我有一个数据框结果,列dte的日期格式,我正在尝试创建一个新的列(bdaterange)作为一个简单的整数/浮点数,我可以用它来查看工作日的月末有多远它有。
result['bdaterange'] = pd.bdate_range(pd.to_datetime(result['dte'], unit='ns').values, pd.to_datetime(result['bdate'], unit='ns').values)
我已经尝试了Sample data:
bid ask spread dte day bdate
01:49:00 2.17 3.83 1.66 2016-12-20 20.858333 2016-12-30
02:38:00 2.2 3.8 1.60 2016-12-20 20.716667 2016-12-30
22:15:00 2.63 3.12 0.49 2016-12-20 21.166667 2016-12-30
03:16:00 1.63 2.38 0.75 2016-12-21 21.391667 2016-12-30
07:11:00 1.46 2.54 1.08 2016-12-21 21.475000 2016-12-30
并使用了那天不能是6& 7在计算但没有得到任何地方。我遇到了BDay()
,我相信这正是我正在寻找的,但是我得到的最接近的错误bdate_range
。
我的尝试是:
Cannot convert input to Timestamp
虽然不确定如何解决错误。
答案 0 :(得分:1)
我认为每行需要bdate_range
的长度,因此需要apply
的自定义功能:
#convert only once to datetime
result['dte'] = pd.to_datetime(result['dte'])
f = lambda x: len(pd.bdate_range(x['dte'], x['dte'] + pd.offsets.BMonthEnd(0)))
result['bdaterange'] = result.apply(f, axis=1)
print (result)
bid ask spread dte day bdaterange
01:49:00 2.17 3.83 1.66 2016-12-20 20.858333 9
02:38:00 2.20 3.80 1.60 2016-12-20 20.716667 9
22:15:00 2.63 3.12 0.49 2016-12-20 21.166667 9
03:16:00 1.63 2.38 0.75 2016-12-21 21.391667 8
07:11:00 1.46 2.54 1.08 2016-12-21 21.475000 8