【Python】pd.date_range()で指定した範囲の日付を取得

pandas.date_range()とは

pandas.date_range()は、pandasライブラリの関数で、datetime型のindexを作成するために使用されます。戻り値はDatetimeIndexオブジェクトであり、生成された日付がインデックスとして格納されます。この関数は、start引数とend引数を指定することで、その期間内のdatetime型のindexを作成することができます。また、freq引数を使用して、indexの頻度を指定することもできます。

指定した範囲の連続した日付を取得する

以下のように記述することで、2023年4月1日から2023年4月30日までの連続した日付を生成することができます。

dates = pd.date_range(start='2023-04-01', end='2023-04-30')
print(dates)

実行結果

DatetimeIndex(['2023-04-01', '2023-04-02', '2023-04-03', '2023-04-04',
               '2023-04-05', '2023-04-06', '2023-04-07', '2023-04-08',
               '2023-04-09', '2023-04-10', '2023-04-11', '2023-04-12',
               '2023-04-13', '2023-04-14', '2023-04-15', '2023-04-16',
               '2023-04-17', '2023-04-18', '2023-04-19', '2023-04-20',
               '2023-04-21', '2023-04-22', '2023-04-23', '2023-04-24',
               '2023-04-25', '2023-04-26', '2023-04-27', '2023-04-28',
               '2023-04-29', '2023-04-30'],
              dtype='datetime64[ns]', freq='D')

name引数を指定するとDataFrameにするときに便利

pandas.date_range()関数の引数には、name引数があります。name引数は、DatetimeIndexオブジェクトの名前を指定するために使用されます。name引数は省略可能で、デフォルト値はNoneです。name引数を使って名前を指定すると、DataFrameを作るときに名前がcolumn名になるため便利です。

以下のように記述することで、column名がdateで中身が2023年4月1日から2023年4月30日までの連続した日付のDataFrameを生成することができます。

dates = pd.date_range(start='2023-04-01', end='2023-04-30', name='date')
pd.DataFrame(dates)

実行結果

date
0 2023-04-01
1 2023-04-02
2 2023-04-03
3 2023-04-04
4 2023-04-05
5 2023-04-06
6 2023-04-07
7 2023-04-08
8 2023-04-09
9 2023-04-10
10 2023-04-11
11 2023-04-12
12 2023-04-13
13 2023-04-14
14 2023-04-15
15 2023-04-16
16 2023-04-17
17 2023-04-18
18 2023-04-19
19 2023-04-20
20 2023-04-21
21 2023-04-22
22 2023-04-23
23 2023-04-24
24 2023-04-25
25 2023-04-26
26 2023-04-27
27 2023-04-28
28 2023-04-29
29 2023-04-30

日付のマスタを作成したいときに役立ちそうです。

freq引数を使って指定した範囲の月初の日付を取得する

freq引数は、生成する日付の間隔を指定するために使用されます。freq引数は省略可能で、デフォルト値は’D’です。freq引数には、‘D’(日)、‘H’(時間)、‘T’(分)、‘S’(秒)、‘L’(ミリ秒)、‘U’(マイクロ秒)、‘N’(ナノ秒)などがあります。月初の日付を取得する場合は‘MS’を指定します。

以下のように記述することで20223年の毎月の月初の日付を所得できます。

pd.date_range(start='2023-01-01', end='2023-12-01', freq='MS')

実行結果

DatetimeIndex(['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01',
               '2023-05-01', '2023-06-01', '2023-07-01', '2023-08-01',
               '2023-09-01', '2023-10-01', '2023-11-01', '2023-12-01'],
              dtype='datetime64[ns]', freq='MS')

ちなみにstart引数とend引数にはどの日(day)を入れても、freq引数が'MS'ならば、月初の日付を取得することになります。

pd.date_range(start='2023-01-15', end='2023-12-31', freq='MS')

実行結果

DatetimeIndex(['2023-02-01', '2023-03-01', '2023-04-01', '2023-05-01',
               '2023-06-01', '2023-07-01', '2023-08-01', '2023-09-01',
               '2023-10-01', '2023-11-01', '2023-12-01'],
              dtype='datetime64[ns]', freq='MS')

freq引数を使って指定した範囲のn日毎の日付を取得する

freq引数を使うことで、n日毎の日付けを取得することができます。 例えば7日毎の日付を取得する場合は下記のように記述します。

pd.date_range(start='2023-04-01', end='2023-04-30', freq='7D')

実行結果

DatetimeIndex(['2023-04-01', '2023-04-08', '2023-04-15', '2023-04-22',
               '2023-04-29']

参考