loc iloc:行・列の順番の変更

loc

locを使って複数行・複数列の範囲を指定する際、「行名のリスト」「列名のリスト」に書いた順番に従って行・列が取得できます。また、同じ行名・列名を複数回書いた場合、同じ行・列が重複して取得できます。

NameAge
10Alice17
20Bob24
30Carol29

行名のリストとして[20, 10]を指定することで、最初に行名が20の行が、次に行名が10の行が取得できます。

df.loc[[20, 10]]
NameAge
20Bob24
10Alice17

また、[20, 20]を指定することで、行名が20の行を重複して取得できます。

df.loc[[20, 20]]
NameAge
20Bob24
20Bob24

同様に、列名のリストとして["Age", "Name"]を指定すると、列Age、列Nameの順に取得できます。

df.loc[:, ["Age", "Name"]]
AgeName
1017Alice
2024Bob
3029Carol
df.loc[0:4, ['home_score', 'away_score']]
home_scoreaway_score
000
142
221
322
430
  • locで行を指定する際、スライスの[n1:n2]はn1以上,n2以下という指定になる
    • 一般的なスライスはn1以上,n2未満

ilocの場合

locと同様に、ilocでも「行番号のリスト」「列番号のリスト」で書いた行番号・列番号の順番に従って取得されます。また、同じ行番号・列番号を複数回書くと同じ行・列が重複して取得できます。

df.iloc[行番号または行番号のリスト, 列番号または列番号のリスト]
import pandas as pd
df = pd.DataFrame(
    [["Alice", 17], ["Bob", 24], ["Carol", 29]],
    index=[10, 20, 30],
    columns=["Name", "Age"],
)
df
NameAge
10Alice17
20Bob24
30Carol29
print(df.loc[[30, 20], ["Age", "Name"]])
print("----")
print(df.iloc[[2,1],[1,0]])
    Age   Name
30   29  Carol
20   24    Bob
----
    Age   Name
30   29  Carol
20   24    Bob

ilocで列番号のリストを指定する場合は、元の順番を気にする必要があります。
それに対し、locで列名を指定する場合は、元の順番を気にする必要がありません。

locの方が便利ですが、通し番号で処理しないといけない場合は、ilocが必要になります。

# 方法1 列の指定にリストを利用
df.iloc[0:5, [3,4]]
home_scoreaway_score
000
142
221
322
430
# 方法2 列の指定にスライスを利用
df.iloc[0:5, 3:5]
home_scoreaway_score
000
142
221
322
430
  • 行と列を同時に指定して任意のデータを抽出している
    • 行をスライス(数字)で指定している
    • 列をスライス(数字)かリスト(数字)で指定している
      • ここでの数字は列を左から0,1,2…と順につけていった数字(インデックス)になる

注意

  • ilocで行や列を指定する際、スライスの[n1:n2]はn1以上n2未満という指定になる
    • 一般的なスライスと同じ

コメント

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