【Python】Pandasで期間を指定してデータを抽出する方法を解説!

はじめに:期間を指定してデータを抽出する利点

データ分析では、ある期間内のデータを抽出することがよくあります。例えば、特定の期間の売上データを抽出して分析することで、その期間の売上状況を把握できます。Pandasを使えば、簡単に期間を指定してデータを抽出することができます。

Pandasで日付データを扱うための前準備:datetime型への変換

Pandasで日付データを扱うためには、データをdatetime型に変換する必要があります。datetime型に変換するには、Pandasのto_datetime()関数を使います。以下は、日付が文字列型のデータをdatetime型に変換する例です。

import pandas as pd
date_str = ['2022-01-01', '2022-01-02', '2022-01-03']
dates = pd.to_datetime(date_str)
print(dates)

実行結果:

DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03'], dtype='datetime64[ns]', freq=None)

to_datetime()関数は、日付が含まれる列を一括で変換することもできます。

df['date'] = pd.to_datetime(df['date'])

期間を指定してデータを抽出する基本操作:query, loc, ilocを使った方法

期間を指定してデータを抽出するには、query、loc、ilocを使う方法があります。

queryを使った方法

queryを使う方法は、条件式を文字列で指定することができます。例えば、2022年1月1日から2022年1月3日までのデータを抽出するには、次のように記述します。

df.query('date >= "2022-01-01" and date <= "2022-01-03"')

locを使った方法

locを使う方法は、行ラベルと列ラベルを指定することで、条件に合う行を抽出します。例えば、2022年1月1日から2022年1月3日までのデータを抽出するには、次のように記述します。

df.loc[(df['date'] >= '2022-01-01') & (df['date'] <= '2022-01-03')]

ilocを使った方法

ilocを使う方法は、行番号と列番号を指定することで、条件に合う行を抽出します。例えば、0番目から2番目の行(つまり、2022年1月1日から2022年1月3日までのデータ)を抽出するには、次のように記述します。

df.iloc[0:3]

実例1:ある期間内の売上データを抽出して分析する

以下は、ある店舗の2022年1月1日から2022年1月31日までの売上データを抽出し、日別の合計売上を求める例です。

import pandas as pd
sales_data = pd.read_csv('sales_data.csv')
# 日付データをdatetime型に変換
sales_data['date'] = pd.to_datetime(sales_data['date'])
# 2022年1月1日から2022年1月31日までのデータを抽出
sales_data = sales_data.query('date >= "2022-01-01" and date <= "2022-01-31"')
# 日別の売上合計を求める
daily_sales = sales_data.groupby('date')['sales'].sum()
print(daily_sales)

実行結果:

date
2022-01-01    3000
2022-01-02    2000
2022-01-03    1500
...
2022-01-29    2500
2022-01-30    2000
2022-01-31    3500
Name: sales, Length: 31, dtype: int64

実例2:特定の年度や月のデータを抽出する方法

以下は、ある店舗の2022年度(2022年4月1日から2023年3月31日まで)の売上データを抽出し、月別の平均売上を求める例です。

import pandas as pd
sales_data = pd.read_csv('sales_data.csv')
# 日付データをdatetime型に変換
sales_data['date'] = pd.to_datetime(sales_data['date'])
# 2022年4月1日から2023年3月31日までのデータを抽出
sales_data = sales_data.query('"2022-04-01" <= date <= "2023-03-31"')
# 月別の平均売上を求める
monthly_sales = sales_data.groupby(pd.Grouper(key='date', freq='M'))['sales'].mean()
print(monthly_sales)

実行結果:

date
2022-04-30    2800.00
2022-05-31    2475.00
2022-06-30    2175.00
...
2023-01-31    2600.00
2023-02-28    3150.00
2023-03-31    3550.00
Freq: M, Name: sales, dtype: float64

まとめ:期間指定抽出の効果的な活用法と注意点

期間指定抽出は、データ分析において非常に重要な操作です。以下は、期間指定抽出の効果的な活用法と注意点です。

効果的な活用法

  • ある期間のデータを抽出して、その期間の傾向やパターンを分析する。
  • 特定の期間のデータを抽出して、その期間の売上や利益などを把握する。
  • 特定の期間のデータを抽出して、その期間における顧客の嗜好や傾向を分析する。

注意点

  • 期間指定の際は、日付のフォーマットに注意して指定すること。
  • 期間指定の際は、開始日と終了日を両方とも含むかどうかについて注意すること。
  • 期間指定の際は、データに欠損値が含まれている場合に注意すること。

以上が、Pandasで期間を指定してデータを抽出する方法の解説でした。