Pythonによるデータのフィルタリングと選択
メニューを表示するにはスワイプしてください
選択とフィルタリングは、データ操作で最も一般的な操作。選択は関心のある特定の列を抽出し、フィルタリングは特定の条件や基準に基づいて行を絞り込む手法。
多くの実際のケースでは、データセット内のすべての列や行を扱う必要はない。大規模なテーブルには何百もの列や何百万もの行が含まれていることがあり、その多くは特定の分析には不要な場合が多い。この章では、select() メソッドと filter() メソッドを使って、必要なデータだけを「切り出す」方法を学習。
特定の列の選択
select() メソッドは、選択した列のみを含む新しい DataFrame を作成する機能。これにより、クラスタが使用するメモリ量が削減され、結果が読みやすくなる。
# Select only two specific columns
selected_df = df.select("carat", "price")
display(selected_df)
Sparkは元のdfを変更せず、新しいselected_dfを作成する点に注意。すべてのカラムから1つだけ除外したい場合や、選択時に計算を行いたい場合は、より高度な構文を使用。ただし、基本的な操作ではカラム名を文字列で指定する方法が標準的なアプローチ。
条件による行のフィルタリング
filter()メソッド(またはそのエイリアスであるwhere())は、データに対するふるいの役割。条件を指定すると、Sparkはその条件が真となる行のみを保持。
# Filter for rows where the carat is '0.23'
filtered_df = df.filter(df.carat == 0.23)
display(filtered_df)
==(等しい)、!=(等しくない)、>(より大きい)、<(より小さい)などの標準的な比較演算子の使用が可能。
複数フィルターの組み合わせ
複数の条件を同時に適用する必要がある場合が多い。これには、フィルターを連結したり、"And"(&)や"Or"(|)などの論理演算子を使用。
good_carat_df = df.filter((df.carat == 0.23) & (df.cut == "Good"))
display(good_carat_df)
& や | でフィルター条件を組み合わせる場合、各条件を必ず括弧で囲むこと。これにより、Spark が論理式を正しく評価できる。
1ステップでの選択とフィルタリング
Spark では「フルーエント」API を使用するため、これらのコマンドを1行で連結して記述できる。この方法は、プロフェッショナルなデータエンジニアリングで非常によく使われるパターン。
# Select specific diamonds by `price > 500`
high_profit_df = df.select("carat", "price").filter(df.price > 500)
display(high_profit_df)
作業内容の確認
各選択やフィルターの後には、count()を実行する習慣を持つことが推奨されます。例えば、10,000行から始めてフィルター後に0行になった場合、フィルター条件が厳しすぎるか、文字列値にタイプミスが含まれている可能性があります。
1. 50列あるテーブルから3列だけを選びたい場合、どのメソッドを使いますか?
2. Pythonで「Total_Profit」が1000より大きい行をフィルタリングする正しい方法はどれですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください