2013-02-18 10 views
33

名前でpandas列に整数でアクセスしようとしています。パンダ列を場所で選択する

df.ix[3]を使用して、場所によって行を選択できます。

しかし、整数で列を選択する方法はありますか?

マイデータフレーム:気にしてい

df=pandas.DataFrame({'a':np.random.rand(5), 'b':np.random.rand(5)}) 
+0

。 –

答えて

57

二つのアプローチ:

>>> df 
      A   B   C   D 
0 0.424634 1.716633 0.282734 2.086944 
1 -1.325816 2.056277 2.583704 -0.776403 
2 1.457809 -0.407279 -1.560583 -1.316246 
3 -0.757134 -1.321025 1.325853 -2.513373 
4 1.366180 -1.265185 -2.184617 0.881514 
>>> df.ix[:, 2] 
0 0.282734 
1 2.583704 
2 -1.560583 
3 1.325853 
4 -2.184617 
Name: C 
>>> df[df.columns[2]] 
0 0.282734 
1 2.583704 
2 -1.560583 
3 1.325853 
4 -2.184617 
Name: C 
+4

FYI df.ixがdf.ilocに置き換えられる –

25

あなたはまた、整数列にアクセスするためにdf.icol(n)を使用することができます。

更新:icolは推奨されておらず、同じ機能をすることによって達成することができる。

df.iloc[:, n] # to access the column at the nth position 
+2

今後のバージョン0.11.0では、これらのメソッドは非推奨であり、将来のバージョンでは削除される可能性があることに注意してください。 iloc/iatで位置を選択する方法については、http://pandas.pydata.org/pandas-docs/dev/indexing.html#indexing-integerをご覧ください。 –

+1

上記のリンクは推奨されていません。そのため、インデックス作成用のドキュメントがその後再構築されたためです:http://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-position。最新のバージョンが0.21.0である今日の時点では、 'iloc'は位置によって列にアクセスするための文書化されたアプローチのままです。 –

1

方法.transpose()カラムに行と行と列を変換し、それゆえあなたも書くことができる

df.transpose().ix[3] 
+0

転置はデータ型を混乱させる可能性があります。 – IanS

3

.locを使用して.locを使用するか、インデックスを使用して.locを使用して ラベルを使用することができます。
In [50]: import pandas as pd 

In [51]: import numpy as np 

In [52]: df = pd.DataFrame(np.random.rand(4,4), columns = list('abcd')) 

In [53]: df 
Out[53]: 
      a   b   c   d 
0 0.806811 0.187630 0.978159 0.317261 
1 0.738792 0.862661 0.580592 0.010177 
2 0.224633 0.342579 0.214512 0.375147 
3 0.875262 0.151867 0.071244 0.893735 

In [54]: df.loc[:, ["a", "b", "d"]] ### Selective columns based slicing 
Out[54]: 
      a   b   d 
0 0.806811 0.187630 0.317261 
1 0.738792 0.862661 0.010177 
2 0.224633 0.342579 0.375147 
3 0.875262 0.151867 0.893735 

In [55]: df.loc[:, "a":"c"] ### Selective label based column ranges slicing 
Out[55]: 
      a   b   c 
0 0.806811 0.187630 0.978159 
1 0.738792 0.862661 0.580592 
2 0.224633 0.342579 0.214512 
3 0.875262 0.151867 0.071244 

In [56]: df.iloc[:, 0:3] ### Selective index based column ranges slicing 
Out[56]: 
      a   b   c 
0 0.806811 0.187630 0.978159 
1 0.738792 0.862661 0.580592 
2 0.224633 0.342579 0.214512 
3 0.875262 0.151867 0.071244 
0

複数の列にアクセスするには、列インデックスのリストをdataFrame.ixに渡します。例えば

:質問をするために更新

>>> df = pandas.DataFrame({'a':np.random.rand(5), 'b':np.random.rand(5), 'c':np.random.rand(5), 'd':np.random.rand(5)}) 

>>> df 
      a   b   c   d 
0 0.705718 0.414073 0.007040 0.889579 
1 0.198005 0.520747 0.827818 0.366271 
2 0.974552 0.667484 0.056246 0.524306 
3 0.512126 0.775926 0.837896 0.955200 
4 0.793203 0.686405 0.401596 0.544421 

>>> df.ix[:,[1,3]] 
      b   d 
0 0.414073 0.889579 
1 0.520747 0.366271 
2 0.667484 0.524306 
3 0.775926 0.955200 
4 0.686405 0.544421 
関連する問題