【Python】pd.period_range()を使ってyyyy-MM.parquetのファイルを順番に読み込む
下記のようなディレクトリ構成になっているときに、いい感じにファイル名のyyyy-MMを順番に取得して、処理をしたいときはpd.period_range()が便利です。
GA_log ├── 2017-01.parquet ├── 2017-02.parquet ├── 2017-03.parquet ├── 2017-04.parquet ├── 2017-05.parquet ├── 2017-06.parquet ├── 2017-07.parquet ├── 2017-08.parquet ├── 2017-09.parquet ├── 2017-10.parquet ├── 2017-11.parquet ├── 2017-12.parquet └── 2018-01.parquet
pd.period_range()とは
pd.period_range()は、pandasの関数の1つで、固定頻度のPeriodIndexを返すために使用されます。この関数は、日(カレンダー)をデフォルトの頻度として使用します。期間の開始と終了を指定することができ、期間の長さを指定することもできます。freq引数で'M'を指定することでyyyy-MMを取得することができます。
pd.period_range()の基本的な使いかた
pd.period_range(start, end, periods=None, freq=None, name=None)
- start:Periodまたは文字列で表される開始日付
- end:Periodまたは文字列で表される終了日付
- periods:PeriodIndexオブジェクトに含まれる期間の数。省略すると、startと- endの日付の差が使用されます
- freq:PeriodIndexオブジェクトの頻度。有効な頻度の例としては、'D'(日)、'M'(月)、'Y'(年)などがあります
- name:PeriodIndexオブジェクトの名前
pd.period_range()を使ってyyyy-MMを取得する
freq引数で'M'を指定することでyyyy-MMを取得することができます。
pd.period_range(start='2017-01-01', end='2018-01-01', freq='M')
出力結果
PeriodIndex(['2017-01', '2017-02', '2017-03', '2017-04', '2017-05', '2017-06', '2017-07', '2017-08', '2017-09', '2017-10', '2017-11', '2017-12', '2018-01'], dtype='period[M]')
こんな感じでyyyy-MM形式で取得できます。日付を扱う他のメソッドなどと比較して何がうれしいかというと、日付の日(day)の情報がないことです。pd.date_range()でも似たようなことができますが、yyyy-MM-ddのように日(day)の情報を持っていたり、時間の情報を持っていることもあり、それらを除く処理が必要になります。pd.period_range()を使えばその除く処理が不要になります。なのでコードが短くなってわかりやすくなり、メンテナンスやデバックなどがしやすくなって嬉しいと考えます。
ファイルを順番に読み込む
index_year_month=pd.period_range(start='2017-01-01', end='2018-01-01', freq='M', name='test') for d in index_year_month: df=pd.read_parquet(f'./GA_log/{str(d)}.parquet') ''' 以下、何かしらの処理 '''
これにより、GA_logディレクトリ内のparquetファイルが順番に読み込まれます。