【Pandas】.date_range() の使い方を優しく教えます　no.31

![見出しを追加 (72).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/01cdda7d-d3a8-ee18-291e-c53bbc36f8e3.png)

こんにちは、まゆみです。

Pandasについての記事をシリーズで書いています。

今回は第31回目になります。

今回の記事では、

.date_range()を使って

>ある時点から別のある時点までの日を基にしたインデックスを作ったり

>時間を基にしたインデックスを作ったり

>営業日のみのインデックスを作ったり

の方法を書いていきます


ちょっとした英単語と、ルールを覚えれば概要は簡単にマスターできますので安心してくださいね。

では、さっそく始めていきます

#.date_range メソッドの概要

![スクリーンショット 2021-04-05 071508.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/b66b9932-12c4-d17a-8ab0-f301da536d68.jpeg)
引用元：[Pandasドキュメント](https://pandas.pydata.org/docs/reference/api/pandas.date_range.html)

.date_range()メソッドは、色々なパラメーターを渡すことができますが、

>start 

>end

>periods 

の組み合わせのうち、<font color="Red">２つを組み合わせないとエラーが出ます。</font>

また、ドキュメントに

『Return a fixed frequency DatetimeIndex』

と書いていますが、翻訳すると『定められた頻度のDatetimeIndexを返す』になります。

![見出しを追加 (71).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/84810096-2112-c25f-d0c2-056db75e5525.png)

後述しますが、パラメーターfreq =に色々な引数を取ることによって、

>日単位の

>時間単位の

>月単位の

と<font color="Red">『どの頻度でインデックスの数字を増やしていくか』を決める</font>ことができます。

それが、Pandasドキュメントの『a fixed frequency』の意味になります

#.date_range()のパラメーター『start』『end』『period』

先ほど、.date_range()メソッドは、<font color="Red">start, end, periodのパラメーターのうち、２つを使わないとエラーが出る</font>と書きました

.date_rangeはある『期間』のDatetimeIndexを返してくれるので、期間を指定するには、

>始まりと終わりの地点を決めるか

>始まりの地点を決めて、いくつの要素でインデックスを作るか

>終わりの地点を決めて、いくつの要素でインデックスをつくるか

を決めなければ、『期間』を定めることができません。

なので、２つのパラメーターが必要なのです。


では、２つのパラメーターの組み合わせで実際にどのようなDatetimeIndexができるのかコードを書きながら解説していきますね。


## パラメーター　start とend の組み合わせ
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/dc496bab-25b0-d1d8-ddb9-dfdb173d5766.png)


start で始まりの地点を

end で終わりの地点を定めます。

start の値とendの値は<font color="Red">範囲に含まれます。</font>

## パラメーター freq　

パラメーターfreqはfrequency = 頻度という意味です。


>1時間おきのインデックスを作りたいのか

>2時間おきのインデックスを作りたいのか

>1日おきのインデックスを作りたいのか

を定めるパラメーターになります。


デフォルト値は"D" でDay、つまり何も書かなければ一日おきのインデックスができることになります。

少し例を書きますと

>freq = "D"

>freq = "2D"  (2日おきのインデックス)

>freq = "H" (1時間おきのインデックス)

>freq = "6H" (6時間おきのインデックス)

>freq = "B" (Business day つまり営業日のみ(月～金)のインデックス)

となります。

もっと他にも引数があります。

詳しくは、[Pandasドキュメント](https://pandas.pydata.org/docs/user_guide/timeseries.html#timeseries-offset-aliases)に載っていますので、興味のある方は参考にどうぞ


### コードを書いてみる

![スクリーンショット 2021-04-05 075902.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/6d5ffed3-984a-a995-c10a-c1225265cf0c.jpeg)

freq="D"はデフォルト値でもあるので、書かなくても結果は上記と同じです。

2日おきのインデックスを作りたい時は

![スクリーンショット 2021-04-05 080010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/e8f1f9e3-f694-1abf-5314-64ab482a7648.jpeg)

同様に、freq の引数を"H"にすれば、1時間おきですし、"2H"にすれば2時間おきのインデックスと言ったように、単位と数字の組み合わせで色々なインデックスを作ることができます。

##週を意味する"W"を使うときの注意点
![見出しを追加 (73).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/90a70545-e780-fab2-3c57-d8c8bf187369.png)

freq = "W"と引数を渡すと、週単位のインデックスが作れますが、果たして何曜日から始まるかも大事な点ですよね。

デフォルト値は　SUN　つまり日曜日になります。

freq = "W" と書くと、毎日曜日のインデックスを作れます。
![スクリーンショット 2021-04-05 082611.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/0a00a8d1-9c49-a055-85fd-9656634bd54c.jpeg)

![見出しを追加 (74).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/ec751cc4-ac00-1268-98a2-2ca4d84981c6.png)

日曜日以外の曜日を指定したい時は

```
freq = "W-曜日"
```
を書けば大丈夫です。

![スクリーンショット 2021-04-05 083313.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/7db3f0bc-8868-c5bf-6fe5-28b63cd0b197.jpeg)

2020/03/12 から　2020/04/12 の期間の火曜日のみのインデックスを作りました。

##パラメーター　start と　periods の組み合わせ
先ほどの解説で、パラメーターstart の意味は分かられたと思います

periods は『いくつのTimeStamp』を返してほしいかを引数に取るパラメーターになります

では、2021/4/5日から20日分のインデックスを作ってみましょう

![スクリーンショット 2021-04-05 084734.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/8e1208c7-67a1-f829-8978-7b9c3cabb461.jpeg)

(1日おきのインデックスを作る時はfreq="D"は書かなくてもよい)

土日を除く営業日(Business day)のインデックスも作ってみますね。

![スクリーンショット 2021-04-05 085124.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/46d562fa-b546-3b26-30ab-29650f37471e.jpeg)

2021/04/05 が月曜日になります。

2021/04/10 と2021/04/11は週末なので、除かれてインデックスが作られています

## パラメーターend とperiods の組みあわせ

start とperiods の組み合わせと考え方は基本的に同じです。

ただ、end でインデックスの最後の日時を決め、そこからいくつ遡るかをperiods に引数として渡せばOKです。


![スクリーンショット 2021-04-05 090152.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/4bebc06b-35f5-dd29-ba27-72e699a4354f.jpeg)

#まとめ

今回の記事では、.date_range()を扱わせていただきました。

引数として渡す値の組み合わせによって、色々なDatetimeIndexが作れますので、色々と試してみてくださいね。

お役に立てれば幸いです。