locを省略した書き方

# locを使った書き方
df.loc[:, 列名または列名のリスト]

# locを省略した書き方(上記と結果は同じ)
df[列名または列名のリスト]

pandasでは、このように同じ処理を複数の方法で書けることがあります。

次のように書くことで指定した条件で行を絞り込めることを学びました。

# locを使った書き方
df.loc[行の比較結果]

pandasでは、df[要素がブール値のSeries]と書くと、df.loc[要素がブール値のSeries]と解釈されます。
行の比較結果は要素がブール値のSeriesなので、上記はlocを使わずに次のように簡潔に書けます。

# locを省略した書き方(結果は同じ)
df[行の比較結果]

絞り込みをしたい場合、通常は、このdf[行の比較結果]というシンプルな書き方をすると良いでしょう。しかし、解説で後述するようにシンプルな書き方ではできることが限られます。場合によってはdf.locを使う必要があります。

NameAge
0Alice17
1Bob24
2Carol29
df[df.Age >= 20]
NameAge
1Bob24
2Carol29
https://images.pyq.jp/repo/prod/pandas_cond_cond_v2/pandas_cond_03.jpg

df[行の比較結果]は、df.loc[行の比較結果]と同じく更新にも使えます。

df[df.Age >= 20] = [["Ben", 14], ["Chuck", 15]]
NameAge
0Alice17
1Ben14
2Chuck15

df.loc[行の比較結果, ...]とする時は、locを省略できません。

たとえば、df.loc[行の比較結果, 列の比較結果]df[行の比較結果, 列の比較結果]とは書けません。
具体的には、df.loc[df.Age >= 20, df.dtypes == int]を以下のようにlocを省略すると、TypeErrorになります。

df[df.Age >= 20, df.dtypes == int]
TypeError: (中略) is an invalid key

より一般的に言うと、df.loc[行の比較結果, 列の指定]df[行の比較結果, 列の指定]とは書けません。

コメント

タイトルとURLをコピーしました