0Pricing
Python Academy · レッスン

インデックス指定、フィルタリング、ブールマスク

loc、iloc、ブール条件で行と列を選択します。

「インデックス指定、フィルタリング、ブールマスク」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

loc と iloc

loc はラベルで選択し、iloc は整数位置で選択します。両者を混同しないようにしてください。

import pandas as pd

df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6]}, index=["x","y","z"])
print(df.loc["y"])       # row with label y
print(df.iloc[1])        # row at position 1 (same row)
print(df.loc["x":"y"])   # rows x to y inclusive

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

ブール値の Series を作成し、それを使って行を選択します。これは NumPy のブールインデックスに相当する pandas の機能です。

import pandas as pd

df = pd.DataFrame({"name":["Alice","Bob","Carol"],"age":[30,17,25]})
adults = df[df["age"] >= 18]
print(adults)
# Alice 30
# Carol 25

複数の条件

ブール条件は &(and)と |(or)で組み合わせます。それぞれの条件を括弧で囲んでください。

import pandas as pd

df = pd.DataFrame({"city":["NY","LA","NY","LA"],"score":[80,90,70,85]})
result = df[(df["city"]=="NY") & (df["score"]>75)]
print(result)

query() メソッド

df.query("expression") は文字列の式を受け取り、ブールマスクよりも読みやすいことがよくあります。

import pandas as pd

df = pd.DataFrame({"age":[30,17,25],"score":[90,80,70]})
result = df.query("age >= 18 and score > 75")
print(result)

isin() によるフィルタリング

isin(list) は、列の値が指定したリストに含まれる行をフィルタリングします。

import pandas as pd

df = pd.DataFrame({"city":["NY","LA","Chicago","NY"],"val":[1,2,3,4]})
print(df[df["city"].isin(["NY","LA"])])
# rows with NY or LA

範囲フィルタリングのための between()

series.between(left, right) は、[left, right] の範囲内にある値に対して True を返します。デフォルトでは両端を含みます。

import pandas as pd

df = pd.DataFrame({"score":[55,70,85,95,40]})
print(df[df["score"].between(60, 90)])
# 70 and 85

代入における loc

SettingWithCopyWarning を避けるため、インプレースで代入するときは必ず loc/iloc を使用してください。

import pandas as pd

df = pd.DataFrame({"val":[1,2,3,4]})
df.loc[df["val"] > 2, "val"] = 99
print(df)
# 0:1  1:2  2:99  3:99

単一の値に対する at と iat

at[label, col] と iat[i, j] は高速なスカラーアクセスを提供します。単一の値にアクセスする場合は loc/iloc より高速です。

import pandas as pd

df = pd.DataFrame({"a":[10,20],"b":[30,40]})
print(df.at[0,"a"])    # 10  (by label)
print(df.iat[1,1])     # 40  (by position)

Dtype による選択

select_dtypes(include/exclude) はデータ型に基づいて列を選択します。

import pandas as pd

df = pd.DataFrame({"x":[1,2],"name":["a","b"],"score":[1.5,2.5]})
nums = df.select_dtypes(include=["number"])
print(nums.columns.tolist())   # ['x', 'score']

重複の削除

drop_duplicates() は重複する行を削除します。特定の列だけを比較するには subset を指定します。

import pandas as pd

df = pd.DataFrame({"name":["Alice","Bob","Alice"],"age":[30,25,30]})
print(df.drop_duplicates())
# keeps first Alice, removes second

nlargest と nsmallest

列の値に基づいて、上位または下位の N 行を効率的に選択します。

import pandas as pd

df = pd.DataFrame({"product":["A","B","C","D"],"sales":[500,300,800,200]})
print(df.nlargest(2,"sales"))
# C 800
# A 500

確認問題

loc と iloc の違いは何ですか。

復習

ラベルに基づいて選択するには loc[label]、位置に基づいて選択するには iloc[i] を使用します。&/| で組み合わせたブールマスクを使って行をフィルタリングします。読みやすいフィルターには query()、メンバーシップの確認には isin() を使用し、SettingWithCopyWarning を避けるため、代入は必ず loc 経由で行ってください。

よくある質問

「インデックス指定、フィルタリング、ブールマスク」レッスンは無料ですか?

はい。「インデックス指定、フィルタリング、ブールマスク」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「インデックス指定、フィルタリング、ブールマスク」で何を学びますか?

loc、iloc、ブール条件で行と列を選択します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「インデックス指定、フィルタリング、ブールマスク」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Series と DataFrame の基礎
  2. インデックス指定、フィルタリング、ブールマスク
  3. GroupBy、集約、ピボットテーブル
  4. マージ、結合、データクリーニング
← Python Academyに戻る