日付でデータをフィルタリングするには、Python のどの機能を使用すればよいか?

Pythonでは、datetimeモジュールを使用して日付や時刻を扱うことができます。以下に日付でデータをフィルタリングするためのよくある方法を示します。

方法 1: 日付範囲内のデータを抽出するために大小比較演算子 (>= と <=) を使用します。

from datetime import datetime

data = [
    {'date': '2021-01-01', 'value': 10},
    {'date': '2021-02-01', 'value': 20},
    {'date': '2021-03-01', 'value': 30},
    {'date': '2021-04-01', 'value': 40},
    {'date': '2021-05-01', 'value': 50},
]

start_date = datetime.strptime('2021-02-01', '%Y-%m-%d')
end_date = datetime.strptime('2021-04-30', '%Y-%m-%d')

filtered_data = [d for d in data if start_date <= datetime.strptime(d['date'], '%Y-%m-%d') <= end_date]
print(filtered_data)

ネイティブな日本語で言い換えてください。

[
    {'date': '2021-02-01', 'value': 20},
    {'date': '2021-03-01', 'value': 30},
    {'date': '2021-04-01', 'value': 40}
]

方法2:リスト内包表記と日付比較演算子を使用して期間内のデータをフィルタリングする。

from datetime import datetime

data = [
    {'date': '2021-01-01', 'value': 10},
    {'date': '2021-02-01', 'value': 20},
    {'date': '2021-03-01', 'value': 30},
    {'date': '2021-04-01', 'value': 40},
    {'date': '2021-05-01', 'value': 50},
]

start_date = datetime.strptime('2021-02-01', '%Y-%m-%d')
end_date = datetime.strptime('2021-04-30', '%Y-%m-%d')

filtered_data = [d for d in data if start_date <= datetime.strptime(d['date'], '%Y-%m-%d') <= end_date]
print(filtered_data)

結果は上記と同じだ。

方法3:pandasライブラリを使用した日付のフィルタリング

import pandas as pd

data = pd.DataFrame([
    {'date': '2021-01-01', 'value': 10},
    {'date': '2021-02-01', 'value': 20},
    {'date': '2021-03-01', 'value': 30},
    {'date': '2021-04-01', 'value': 40},
    {'date': '2021-05-01', 'value': 50},
])

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

start_date = pd.to_datetime('2021-02-01')
end_date = pd.to_datetime('2021-04-30')

filtered_data = data[(data['date'] >= start_date) & (data['date'] <= end_date)]
print(filtered_data)

日本語に自然に出力:

        date  value
1 2021-02-01     20
2 2021-03-01     30
3 2021-04-01     40

pandasライブラリを使用してデータをデータフレームに変換し、to_datetime関数を使用して日付文字列を日付オブジェクトに変換しました。その後、比較演算子と論理演算子を使用して日付の範囲内にあるデータをフィルタリングしました。

bannerAds