Data Analysis

Pandas DataFrameの日付ベースフィルタリング完全マスター

Spread the love

日付範囲に基づいてPandas DataFrameを効率的にフィルタリングすることは、データ分析において非常に重要なスキルです。Pandasはこれを実現するためのいくつかの方法を提供しており、それぞれに長所と短所があります。この記事では、4つの一般的なアプローチを検討し、それらの構文、効率性、およびユースケースを比較します。

目次

ブールマスクによるフィルタリング

ブールマスクは、最も基本的な柔軟性のあるアプローチを提供します。指定された条件に基づいて行をフィルタリングするブール配列(マスク)を作成します。この方法は、複雑なシナリオにも非常に適応性があります。


import pandas as pd

data = {'Date': pd.to_datetime(['2023-10-26', '2023-11-15', '2023-12-01', '2024-01-10', '2024-02-20']),
        'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)

start_date = pd.to_datetime('2023-11-01')
end_date = pd.to_datetime('2024-01-01')

mask = (df['Date'] >= start_date) & (df['Date'] <= end_date)
filtered_df = df[mask]  #df.loc[mask] より効率的
print(filtered_df)

.query()メソッドの使用

.query()メソッドは、フィルタリングのためのより可読性が高く簡潔な代替手段を提供します。複雑な条件に特に役立ちます。


start_date = '2023-11-01'
end_date = '2024-01-01'

filtered_df = df.query('@start_date <= Date <= @end_date')
print(filtered_df)

.isin()メソッドの利用

.isin()メソッドは、連続した範囲ではなく、特定の日付のリストに基づいて行を選択する必要がある場合に適しています。大規模な連続範囲には効率性が低くなります。


dates_to_include = pd.to_datetime(['2023-11-15', '2023-12-01'])
filtered_df = df[df['Date'].isin(dates_to_include)]
print(filtered_df)

.between()メソッドの活用

.between()メソッドは、連続した日付範囲内の行を選択するための効率的なアプローチを提供します。効率的で読みやすいです。


start_date = pd.to_datetime('2023-11-01')
end_date = pd.to_datetime('2024-01-01')

filtered_df = df[df['Date'].between(start_date, end_date, inclusive='both')] #inclusive引数を明確化のために追加
print(filtered_df)

要約すると、Pandasは日付ベースのフィルタリングのための多様な方法を提供します。最適な選択は、特定のニーズとコーディングスタイルによって異なります。ブールマスクは最大の柔軟性を提供し、.query()は可読性を向上させ、.between()は連続範囲の選択を簡素化します。最適なパフォーマンスを得るために、日付列がdatetime64型であることを確認してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です