<Python, pandas> データフレームの行列選択方法。 少しわかったこと。
データフレームの行列アクセスで少しわかったこと。
まずはデータフレーム。 index/columnsにの設定が何もない、数字の時。
In [3]: df = pd.DataFrame([(1,2),(3,4)]) In [4]: df Out[4]: 0 1 0 1 2 1 3 4 In [5]: df.ix[0,1] Out[5]: 2 In [6]: df.iloc[0,1] Out[6]: 2 In [7]: df.loc[0,1] Out[7]: 2
全部動きが一緒。
で、columnsに値を設定すると、、
In [8]: df.columns = list('ab') In [9]: df Out[9]: a b 0 1 2 1 3 4 In [10]: df.ix[0,1] Out[10]: 2 In [11]: df.iloc[0,1] Out[11]: 2 In [12]: df.loc[0,1] KeyError: 'the label [1] is not in the [index]'
で .loc はエラーを吐く。
ix/ilocはcolumns(名)でなくて、columns(数)でアクセスする。 .locは(名前)でアクセス。
なので、
In [14]: df.loc[0,'a'] Out[14]: 1
だとOK。
あと、データフレームのスライスは、 df[row側,col側]となる。
例、
In [18]: df Out[18]: 0 1 2 0 1 2 3 1 4 5 6 2 7 8 9 In [20]: df.ix[0:1,0:1] Out[20]: 0 1 0 1 2 1 4 5 In [21]: df.iloc[0:1,0:1] Out[21]: 0 0 1 In [23]: df.ix[:,0:1] Out[23]: 0 1 0 1 2 1 4 5 2 7 8 In [24]: df.iloc[:,0:1] Out[24]: 0 0 1 1 4 2 7
.ixは index番号を参照。 .ilocはスライスの箇所を参照しているっぽいね。
[:,:]
がrow全部、column全部を選択。なので、
In [35]: df.ix[:,:] Out[35]: 0 1 2 0 1 2 3 1 4 5 6 2 7 8 9
となる。
だいぶ分かって気がしてきた。。。