次回より『ヒデログ』とご検索ください

【Python入門】pandasの「loc」と「iloc」違いと使い方

pandas

pandasでは要素にアクセスするとき例えば、

import pandas as pd
import numpy as np
data=pd.DataFrame(np.arange(-8,8).reshape((4,4)),
                 index=['Tokyo','Kanagawa','Saitama','Chiba'],
                 columns=['one','two','three','four'])
data[0][1]
# error
data[0,1]
# error

となります。

そこで、pandasの要素にアクセスするメソッドで「loc」と「iloc」があります。ですが、使い方がごっちゃになって分からなくなりますよね。

そんな人向けにloc」と「iloc」の使い方をまとめました。

ilocとlocの違い

lociloc共に要素にアクセスするのに使いますが、その指定の仕方に違いがあります。その違いを簡単にまとめると

ポイント

  • loc:行・列をラベル名で指定
  • iloc:行・列を要素番号で指定

となります。ですのでlocではラベル名(文字列)ilocでは要素番号(数字)が入ることになります。それでは具体例を見ていきましょう。

locの使い方

locラベル名を指定して、インデックス参照をします。

構文

data.loc['rowの名称','columnsの名称']でアクセスします。columnsは省略可能です。rowやcolumnsに指定するとき「list」や「スライシング」も指定可能です。

locのサンプル

locのサンプルを見ていきましょう
loc

locのサンプルソースコード

(コピペできるサンプルコードが画像の下にあります。)

import pandas as pd
import numpy as np
data=pd.DataFrame(np.arange(-8,8).reshape((4,4)),
                 index=['Tokyo','Kanagawa','Saitama','Chiba'],
                 columns=['one','two','three','four'])
data.loc['Tokyo']
# Tokyoの行ベクトルをSeriesとして取得する
data.loc[['Tokyo','Saitama']]
# TokyoとSaitamaの行ベクトルを行列として取得
data.loc['Tokyo',['one','two']]
# Tokyoの列ベクトルの内oneとtwoに対応する要素をSeriesとして取得

# その他サンプル(スライシング)
data.loc[:,:'two']
#          one two
#    Tokyo  -8  -7
# Kanagawa  -4  -3
#  Saitama   0   1
#    Chiba   4   0
data.loc['Kanagawa':'Saitama',:'three']
#          one two three
# Kanagawa  -4  -3    -2
#  Saitama   0   1     2

ilocの使い方

iloc数値でインデックス参照をします。

構文

data.iloc['row番号','columns番号']でアクセスします。rowやcolumnsに指定するときlistやスライシングもも指定可能です。

ilocのサンプル

iloc

ilocのサンプルコード

import pandas as pd
import numpy as np
data=pd.DataFrame(np.arange(-8,8).reshape((4,4)),
                 index=['Tokyo','Kanagawa','Saitama','Chiba'],
                 columns=['one','two','three','four'])
data.iloc[1]
# 2番目の行ベクトル取得
data.iloc[[2,3]]
# 3,4番目の行ベクトルを行列で取得
data.iloc[[2,3],[1]]
# 3,4番目の行ベクトルと2番目の列ベクトルが交わるところの行列を取得

# その他サンプル(スライシング)
data.iloc[:,:2]
#          one two
#    Tokyo  -8  -7
# Kanagawa  -4  -3
#  Saitama   0   1
#    Chiba   4   0

例外

コラム名とインデックス名を直接「1つ」だけ指定すれば要素を取得することができます。

構文

data['コラム名']['インデックス名']でアクセスできます。インデックスは省略可能です。ただし、locと異なりlistやスライシングは使うことができません。

サンプル

pandas

サンプルコード

import pandas as pd
import numpy as np
data=pd.DataFrame(np.arange(-8,8).reshape((4,4)),
                 index=['Tokyo','Kanagawa','Saitama','Chiba'],
                 columns=['one','two','three','four'])
data['one']['Tokyo']
data['one']
#    Tokyo  -8
# Kanagawa  -4
#  Saitama   0
#    Chiba   4
data['one':'three']['Tokyo']
# error

まとめ(locとilocの違い)

  • locは、インデックス名・コラム名(ラベル名)を直接指定して行列の要素を取得する
  • ilocは、行列の要素の位置(インデックスの位置)を指定し行列の要素を取得する

iが付いているのがインデックス=数字と覚えておけばいいでしょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です