2017-07-04 10 views
1

現在の日付からpandasデータフレームの月末までの営業日の日数を生成します。 など。 4、23/06/2017 - - 26/06/2017 5入力をタイムスタンプ、bday_range(...)に変換できません - Pandas/Python

私はタイプエラーを取得しておくと、私はトラブルを抱えている:

TypeError: Cannot convert input to Timestamp 

ラインから:

result['bdaterange'] = pd.bdate_range(pd.to_datetime(result['dte'], unit='ns').values, pd.to_datetime(result['bdate'], unit='ns').values) 

私は日付形式の列dteのデータフレーム結果があります。単純な整数/浮動小数点として新しい列(bdaterange)を作成しようとしていますが、これは営業日の月末からどれだけ離れているかを見るために使用できます。

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 

私はBDay()を試してみましたが、日が計算で6 & 7することはできませんが、どこにも持っていないことを利用しました。私はbdate_rangeを見つけました。これは私が探しているものと正確には信じていますが、最も近いものはエラーCannot convert input to Timestampです。

私の試みは、次のとおりです。

result['bdate'] = pd.to_datetime(result['dte']) + BMonthEnd(0) 

result['bdaterange'] = pd.bdate_range(pd.to_datetime(result['dte'], unit='ns').values, pd.to_datetime(result['bdate'], unit='ns').values) 

print(result['bdaterange']) 

しかし、エラーを解決する方法がわかりません。

答えて

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 
+0

これは完璧に動作します - 感謝を。 なぜ、値の代わりにlen()関数を使用する必要がありましたか? – LLC

+0

私は、各行に 'bdate_range'という出力があり、' array'( 'Datetimeindex')は何とかなると思います。 arrayの長さを取得する単純な方法は 'len'です – jezrael

関連する問題