43

私はパンダを使用していますが、パンダを使用して開始日から終了日までの営業日を取得する最も簡単な方法は何ですか?

Python でこれを行うことに関する投稿はたくさんありますが (たとえば)、pandas はおそらくこれを非常に簡単に処理できると思うので、pandas を直接使用することに興味があります。

4

7 に答える 7

29

v0.14から休日カレンダーが使えるようになりました。

from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay

us_bd = CustomBusinessDay(calendar=USFederalHolidayCalendar())
print pd.DatetimeIndex(start='2010-01-01',end='2010-01-15', freq=us_bd)

戻り値:

DatetimeIndex(['2010-01-04', '2010-01-05', '2010-01-06', '2010-01-07',
               '2010-01-08', '2010-01-11', '2010-01-12', '2010-01-13',
               '2010-01-14', '2010-01-15'],
              dtype='datetime64[ns]', freq='C')
于 2015-11-02T15:08:18.013 に答える
27

bdate_range または BDay() を使用するときは注意してください。名前が営業日の範囲であると誤解する可能性がありますが、実際には週末が取り除かれた単なる暦日です (つまり、休日は考慮されません)。 .

于 2015-10-08T09:23:03.253 に答える
15

BDay()範囲内の営業日を取得するために使用します。

from pandas.tseries.offsets import *

In [185]: s
Out[185]: 
2011-01-01   -0.011629
2011-01-02   -0.089666
2011-01-03   -1.314430
2011-01-04   -1.867307
2011-01-05    0.779609
2011-01-06    0.588950
2011-01-07   -2.505803
2011-01-08    0.800262
2011-01-09    0.376406
2011-01-10   -0.469988
Freq: D

In [186]: s.asfreq(BDay())
Out[186]: 
2011-01-03   -1.314430
2011-01-04   -1.867307
2011-01-05    0.779609
2011-01-06    0.588950
2011-01-07   -2.505803
2011-01-10   -0.469988
Freq: B

スライスあり:

In [187]: x=datetime(2011, 1, 5)

In [188]: y=datetime(2011, 1, 9)

In [189]: s.ix[x:y]
Out[189]: 
2011-01-05    0.779609
2011-01-06    0.588950
2011-01-07   -2.505803
2011-01-08    0.800262
2011-01-09    0.376406
Freq: D

In [190]: s.ix[x:y].asfreq(BDay())
Out[190]: 
2011-01-05    0.779609
2011-01-06    0.588950
2011-01-07   -2.505803
Freq: B

count()

In [191]: s.ix[x:y].asfreq(BDay()).count()
Out[191]: 3
于 2012-10-22T21:16:33.590 に答える