无法将输入转换为Timestamp,bday_range(...) - Pandas / Python

时间:2017-07-04 12:29:08

标签: python pandas

希望为当前日期与熊猫数据框月末之间的工作日生成数字。 例如。 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

虽然不确定如何解决错误。

1 个答案:

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