ilocとlocの違い
5591 ワード
ilocとlocの違いは、いつもあいまいで、テストで比較してみましょう.
フォルダの設定
ファイルを開き、値を割り当て、インデックスを追加
ilocは、ゼロ行目のデータを取得する位置インデックスに従って行データを取得する
ilocは位置インデックスに従って1行目から4行目のデータを取得し、これは前閉後開である
以下の式【16】、【17】において、ilocとlocの意味は同じで、取ったある数行、ある数列のデータを表す
locはタグインデックスによる行または列データであり、これはインデックスが「A」である行であり、この場合もゼロ行目を取得することに相当する.
これは、行ラベルに従って、「A」と「C」のラベルを付けた行です.
【17】の意味と一致する
次のテストでローインデックスが設定されていない場合
このときilocには大きな変化はありません.位置によって取得されるので、ゼロから始まります.
#iloc前閉後開
locはラベルに従っているので、前閉後閉に相当します
この取得は上と一致する
まとめ:ilocは、位置インデックスのみで行または列を取得できます.locは、ラベルインデックスで取得した行または列のみを使用できます.
import pandas as pd
import os
import numpy as np
フォルダの設定
os.chdir("/Users/XXX/Documents/csv“)
ファイルを開き、値を割り当て、インデックスを追加
In [8]:df = pd.read_csv("ex6.csv”)
In [9]: df1 = df.head(10)
In [10]: df1
Out[10]:
one two three four key
0 0.467976 -0.038649 -0.295344 -1.824726 L
1 -0.358893 1.404453 0.704965 -0.200638 B
2 -0.501840 0.659254 -0.421691 -0.057688 G
3 0.204886 1.074134 1.388361 -0.982404 R
4 0.354628 -0.133116 0.283763 -0.837063 Q
5 1.817480 0.742273 0.419395 -2.251035 Q
6 -0.776764 0.935518 -0.332872 -1.875641 U
7 -0.913135 1.530624 -0.572657 0.477252 K
8 0.358480 -0.497572 -0.367016 0.507702 S
9 -1.740877 -1.160417 -1.637830 2.172201 G
In [11]: df1.index = ['A','B','C','D','E','F','G','H','I','K’]
ilocは、ゼロ行目のデータを取得する位置インデックスに従って行データを取得する
In [14]: df1.iloc[0]
Out[14]:
one 0.467976
two -0.0386485
three -0.295344
four -1.82473
key L
Name: A, dtype: object
ilocは位置インデックスに従って1行目から4行目のデータを取得し、これは前閉後開である
In [15]: df1.iloc[1:5]
Out[15]:
one two three four key
B -0.358893 1.404453 0.704965 -0.200638 B
C -0.501840 0.659254 -0.421691 -0.057688 G
D 0.204886 1.074134 1.388361 -0.982404 R
E 0.354628 -0.133116 0.283763 -0.837063 Q
以下の式【16】、【17】において、ilocとlocの意味は同じで、取ったある数行、ある数列のデータを表す
In [16]: df1.iloc[[1,2],[2,3]]
Out[16]:
three four
B 0.704965 -0.200638
C -0.421691 -0.057688
In [17]: df1.iloc[:,[2,3]]
Out[17]:
three four
A -0.295344 -1.824726
B 0.704965 -0.200638
C -0.421691 -0.057688
D 1.388361 -0.982404
E 0.283763 -0.837063
F 0.419395 -2.251035
G -0.332872 -1.875641
H -0.572657 0.477252
I -0.367016 0.507702
K -1.637830 2.172201
locはタグインデックスによる行または列データであり、これはインデックスが「A」である行であり、この場合もゼロ行目を取得することに相当する.
In [18]: df1.loc['A']
Out[18]:
one 0.467976
two -0.0386485
three -0.295344
four -1.82473
key L
Name: A, dtype: object
これは、行ラベルに従って、「A」と「C」のラベルを付けた行です.
In [19]: df1.loc[['A','C’]]
Out[19]:
one two three four key
A 0.467976 -0.038649 -0.295344 -1.824726 L
C -0.501840 0.659254 -0.421691 -0.057688 G
In [20]: df1.loc[['A','C'],['one','three']]
Out[20]:
one three
A 0.467976 -0.295344
C -0.501840 -0.421691
【17】の意味と一致する
In [21]: df1.loc[:,['one','three']]
Out[21]:
one three
A 0.467976 -0.295344
B -0.358893 0.704965
C -0.501840 -0.421691
D 0.204886 1.388361
E 0.354628 0.283763
F 1.817480 0.419395
G -0.776764 -0.332872
H -0.913135 -0.572657
I 0.358480 -0.367016
K -1.740877 -1.637830
次のテストでローインデックスが設定されていない場合
In [44]: df2 = df.head(10)
In [45]: df2
Out[45]:
one two three four key
0 0.467976 -0.038649 -0.295344 -1.824726 L
1 -0.358893 1.404453 0.704965 -0.200638 B
2 -0.501840 0.659254 -0.421691 -0.057688 G
3 0.204886 1.074134 1.388361 -0.982404 R
4 0.354628 -0.133116 0.283763 -0.837063 Q
5 1.817480 0.742273 0.419395 -2.251035 Q
6 -0.776764 0.935518 -0.332872 -1.875641 U
7 -0.913135 1.530624 -0.572657 0.477252 K
8 0.358480 -0.497572 -0.367016 0.507702 S
9 -1.740877 -1.160417 -1.637830 2.172201 G
このときilocには大きな変化はありません.位置によって取得されるので、ゼロから始まります.
In [46]: df2.iloc[1]
Out[46]:
one -0.358893
two 1.40445
three 0.704965
four -0.200638
key B
Name: 1, dtype: object
#iloc前閉後開
In [47]: df2.iloc[1:3]
Out[47]:
one two three four key
1 -0.358893 1.404453 0.704965 -0.200638 B
2 -0.501840 0.659254 -0.421691 -0.057688 G
locはラベルに従っているので、前閉後閉に相当します
In [48]: df2.loc[1:3]
Out[48]:
one two three four key
1 -0.358893 1.404453 0.704965 -0.200638 B
2 -0.501840 0.659254 -0.421691 -0.057688 G
3 0.204886 1.074134 1.388361 -0.982404 R
この取得は上と一致する
In [49]: df2.loc[1:3,['one','three']]
Out[49]:
one three
1 -0.358893 0.704965
2 -0.501840 -0.421691
3 0.204886 1.388361
In [50]: df2.iloc[1:2:,1:2]
Out[50]:
two
1 1.404453
まとめ:ilocは、位置インデックスのみで行または列を取得できます.locは、ラベルインデックスで取得した行または列のみを使用できます.