Pandasは、データ操作と分析のための強力なPythonライブラリです。列値に基づいてDataFrameの行をフィルタリングすることは、データ処理における基本的なタスクです。この記事では、シンプルから複雑なシナリオまで、Pandas DataFrameを効率的にフィルタリングするさまざまな手法を探ります。
目次
- 基本的なフィルタリング:単一列、単一条件
- 否定:条件に一致しない行の選択
- 数値比較:より大きい、より小さいなど
- 条件の組み合わせ:ANDとOR演算
- 高度なフィルタリング:複数の列と複雑なロジック
isin()
による効率的なフィルタリング
基本的なフィルタリング:単一列、単一条件
最も単純なフィルタリングは、特定の列が特定の値と一致する行を選択することです。これはブールインデックスを使用して実現されます。
import pandas as pd
# サンプルDataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 22, 28],
'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)
# Cityが'London'である行を選択
london_residents = df[df['City'] == 'London']
print(london_residents)
このコードは、’City’列が’London’である場合はTrue
、それ以外の場合はFalse
であるブールマスク(df['City'] == 'London'
)を作成します。このマスクはDataFrameのインデックスに使用され、マスクがTrue
である行のみが選択されます。
否定:条件に一致しない行の選択
列に特定の値が含まれていない行を選択するには、!=
演算子を使用してブール条件を否定します。
# Cityが'London'でない行を選択
not_london_residents = df[df['City'] != 'London']
print(not_london_residents)
数値比較:より大きい、より小さいなど
数値列の場合、比較演算子(>
、<
、>=
、<=
)を使用して値の範囲に基づいてフィルタリングします。
# Ageが25より大きい行を選択
older_than_25 = df[df['Age'] > 25]
print(older_than_25)
# Ageが25以下の行を選択
younger_than_or_equal_to_25 = df[df['Age'] <= 25]
print(younger_than_or_equal_to_25)
条件の組み合わせ:ANDとOR演算
論理演算子&
(AND)と|
(OR)を使用してブール条件を組み合わせることで、複数の列値に基づいてフィルタリングします。各条件を括弧で囲みます。
# Cityが'London'であり、かつAgeが25より大きい行を選択
london_and_older = df[(df['City'] == 'London') & (df['Age'] > 25)]
print(london_and_older)
# Cityが'London'であるか、またはAgeが25より大きい行を選択
london_or_older = df[(df['City'] == 'London') | (df['Age'] > 25)]
print(london_or_older)
高度なフィルタリング:複数の列と複雑なロジック
複雑なシナリオでは、query()
メソッドにより可読性が向上します。
# 可読性を向上させるためのquery()の使用
complex_filter = df.query('(City == "London" and Age > 25) or (Age < 23)')
print(complex_filter)
isin()
による効率的なフィルタリング
isin()
メソッドは、値がリストに含まれているかどうかを確認する簡潔な方法を提供します。
cities_to_include = ['London', 'Paris']
filtered_df = df[df['City'].isin(cities_to_include)]
print(filtered_df)
この記事では、PandasでDataFrameをフィルタリングするためのさまざまな手法を示しました。適切なメソッドの選択は、フィルタリング基準の複雑さに依存します。論理演算子を使用する際には、括弧を正しく使用して正確な結果を確保してください。