インデックス指定、フィルタリング、ブールマスク
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 secondnlargest と 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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Series と DataFrame の基礎
- インデックス指定、フィルタリング、ブールマスク
- GroupBy、集約、ピボットテーブル
- マージ、結合、データクリーニング