用語比較
locとilocの違い|ラベルで選ぶか、位置で選ぶか(Python3データ分析)
locとilocの違いは行や列を何で指定するかで、locはラベル、ilocは0から数える整数の位置で選びます。どちらもpandasのSeriesやDataFrameの属性です。
スライスの終点も違い、locのラベルのスライスは開始も終了も含むので、同じ「1:3」でもlocとilocで取り出される行数が変わります。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
locとilocの要点
loc
主にラベルで選ぶ。ラベルのスライス 'a':'f' は、開始も終了も含まれる。ラベルが見つからないとKeyErrorになる。
iloc
主に整数の位置(0から、軸の長さ-1まで)で選ぶ。スライスは通常のPythonと同じで、終端を含まない。範囲外の指定はIndexErrorになる(スライスは範囲外でもエラーにならない)。
違いを表で確認
| 比較軸 | loc | iloc |
|---|---|---|
| 何で指定するか | ラベル(行索引・列名) | 整数の位置(0から数える) |
| スライスの終点 | 含まれる(開始も終了も、索引にあれば含まれる) | 含まれない(通常のPythonのスライスと同じ) |
| 整数を渡したとき | 整数もラベルとして扱う。位置ではない | 整数は位置として扱う |
| 存在しない指定をしたとき | ラベルが見つからないとKeyErrorになる | 範囲外の位置を指定するとIndexErrorになる(スライスは範囲外でも許される) |
| 真偽値の配列 | 渡せる | 渡せる |
| 1つの値だけを速く取り出す場合の対応 | at[行ラベル, 列ラベル] | iat[行の位置, 列の位置] |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
df.loc[0:2] と df.iloc[0:2] の行数が違って戸惑っている人
locはラベルの0から2までを終点も含めて選ぶので3行、ilocは位置の0と1だけを選ぶので2行です。既定の索引(0から始まる連番)でも、この差は出ます。
索引が連番でないのに、整数を渡して KeyError が出た人
locは整数もラベルとして扱います。索引が10、20、30のようにずれているとき、loc[1]はラベル1を探すので、見つからなければKeyErrorです。位置で選びたいならilocを使います。
出力を読む問題で、どの行が選ばれたのか追えない人
まず、メソッドがlocかilocかを見ます。次に、渡した値がラベルか位置かを決め、スライスなら終点を含めるかどうかを確かめます。この順に見れば、選ばれる行を1行ずつ書き出せます。
具体例で使い分ける
例 1
索引が10、20、30、40、50のSeriesで、locとilocを比べる
s = pd.Series(list("abcde"), index=[10, 20, 30, 40, 50]) とします。値はa、b、c、d、eで、ラベルは10から50、位置は0から4です。この Series に対して、s.loc[20:40]、s.iloc[1:3]、s.loc[1]、s.iloc[1] を実行したときの結果を追います。
- s.loc[20:40] は、ラベル20から40までのスライスです。開始も終了も含まれるので、ラベル20・30・40の3行(b、c、d)が選ばれます。
- s.iloc[1:3] は、位置1から3の手前までのスライスです。終端は含まれないので、位置1と2の2行(b、c)が選ばれます。
- s.loc[1] は、ラベル1を探します。この索引に1はないため、
KeyErrorになります。1は位置ではなくラベルとして扱われる点が要点です。 - s.iloc[1] は、位置1の値を取り出します。結果は b です。
結論: 同じ「1」や「1:3」でも、locはラベル、ilocは位置として読みます。さらに、スライスはlocなら終点を含み、ilocなら含みません。この2点を順に確かめれば、結果を書き出せます。
例 2
公式ドキュメントの DataFrame の例で、行と列を選ぶ
pandas公式の「10 minutes to pandas」には、df.loc[:, ["A", "B"]] と df.iloc[3:5, 0:2] の例があります。どちらも、行と列の2つの指定をカンマで区切って渡す形です。
- df.loc[:, ["A", "B"]] は、行は「:」ですべて、列は列名AとBを指定しています。全行のうち、A列とB列が選ばれます。
- df.iloc[3:5, 0:2] は、行を位置3から5の手前まで、列を位置0から2の手前までで指定しています。行は位置3と4、列は位置0と1が選ばれます。
- 公式は、df.loc["20130102":"20130104", ["A", "B"]] の例でも、ラベルのスライスでは両端が含まれると述べています。
結論: 行と列を同時に選ぶときも、locは行ラベルと列名、ilocは行の位置と列の位置を渡します。ラベルと位置を1つの指定の中で混ぜないのが基本です。
問題文から答えを選ぶ手順
- 1
locかilocかを見る
メソッド名で、渡した値をラベルとして読むか、位置として読むかが決まります。
- 2
渡された値がスライスかどうかを見る
スライスなら、locは終点を含み、ilocは含みません。単一の値や配列なら、ラベルまたは位置で1つずつ選びます。
- 3
存在しない指定がないかを確かめる
locでラベルが見つからなければ
KeyError、ilocで位置が範囲外ならIndexErrorです。
試験での見分け方
- 1.loc は主にラベルで選ぶ。ラベルのスライスは開始も終了も含まれる。
- 2.iloc は主に整数の位置で選ぶ。スライスは通常のPythonと同じで、終端を含まない。
- 3locでは整数もラベルとして扱う。位置で選びたいときはilocを使う。
誤答しやすい選択肢
locのスライスも、終点を含まないと考える
修正: ラベルのスライスでは、索引にあれば開始も終了も含まれます。含まれないのはilocのスライスです。
locに渡した整数を、位置だと考える
修正: locは整数もラベルとして扱います。索引が連番でないときは、位置を指定したつもりでもKeyErrorになります。
どちらも存在しない指定では同じエラーになると考える
修正: locはラベルが見つからないとKeyError、ilocは範囲外の位置を指定するとIndexErrorです。ただしilocのスライスは範囲外でもエラーになりません。
確認問題
Q1DataFrameから、位置で行や列を選ぶときに使う属性は?
答え: iloc
ilocは主に整数の位置(0から、軸の長さ-1まで)で選びます。ラベルで選ぶのはlocです。
Q2既定の索引(0から始まる連番)のDataFrameで、df.loc[0:2] が選ぶ行数は?
答え: 3行
locのラベルのスライスは、開始も終了も含まれます。ラベル0、1、2の3行です。df.iloc[0:2] なら、位置0と1の2行になります。
Q3索引にラベル1がないSeriesに対して、s.loc[1] を実行すると、どうなるか?
答え: KeyErrorになる
locは整数もラベルとして扱い、ラベルが見つからないとKeyErrorを出します。位置1を取りたいときは s.iloc[1] です。
到達チェック
- locとilocの、選び方の違い(ラベルか位置か)を言い分けられる
- スライスの終点を含むのはlocだと説明できる
- df.iloc[3:5, 0:2] が選ぶ行と列の位置を書き出せる
関連ページで確認する
同じ資格で次に知りたいこと
- Python3データ分析試験とデータ分析実践試験の違い(受験料)
Python3エンジニア認定データ分析試験(40問、正答率70%、受験料1万円・税別)とデータ分析実践試験(40問・75分、正答率70%、1万2千円・税別)の違いを、主教材、出題範囲の配分、受験料、受験の順番まで公式情報で比べます。
- mergeとconcatの違い|キーで結合するか、そのまま連結するか(Python3データ分析)
pandasのmerge()とconcat()の違いを、結合の基準(キー列か、並べて連結か)で整理します。pandas公式「10 minutes to pandas」の例、キーが重複したときの行数、確認問題つき。
- dropnaとfillnaの違い|欠損値の行を削除するか、値で埋めるか(Python3データ分析)
pandasのdropna()とfillna()の違いを、欠損値の扱い(行を削除するか、指定の値で埋めるか)で整理します。pandas公式「10 minutes to pandas」の4行の例で、結果の行数と埋まる値を追い、確認問題つき。
よくある質問
Qlocとは?
pandasのSeriesやDataFrameから、主にラベルで行や列を選ぶ属性です。ラベルのスライスでは開始も終了も含まれ、ラベルが見つからないとKeyErrorになります。
Qilocとは?
主に整数の位置(0から、軸の長さ-1まで)で行や列を選ぶ属性です。スライスは通常のPythonと同じで、終端を含みません。
Qlocとilocの違いは?
選び方とスライスの終点です。locはラベルで選び、スライスは終点も含みます。ilocは位置で選び、スライスは終端を含みません。
Qlocとilocは、どちらも真偽値の配列を渡せますか?
渡せます。pandas公式ドキュメントは、locもilocも、主な入力に加えて真偽値の配列を使えると説明しています。
Qデータ分析試験の範囲?
本サイトの第4章pandasで、行・列の選択を扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
