場所によるパンダ列の選択


100

名前付きパンダの列に整数でアクセスしようとしています。

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

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

私のデータフレーム:

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

質問するように更新されました。
Jason Strimpel 2013

この例では、列の順序が定義されていない場合があります。( 'a'は最初の列または2番目の列です)。
user48956 2018

回答:


151

頭に浮かぶ2つのアプローチ:

>>> 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.iloc[:, 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

編集:元の回答ではの使用が提案されていましたがdf.ix[:,2]、この関数は現在廃止されています。ユーザーはに切り替える必要がありdf.iloc[:,2]ます。


28
FYI df.ixがdf.ilocに置き換えられました
yosemite_k

同じ名前の2つの列がある場合、df.iloc [:、2]メソッドは機能しますが、1つの列だけを返しますが、df [df.columns [2]]メソッドは同じ名前の両方の列を返します。
BobbyG、

54

を使用df.icol(n)して、整数で列にアクセスすることもできます。

Update:icolは非推奨であり、同じ機能は次の方法で実現できます。

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

2
次のバージョン0.11.0では、これらのメソッドは非推奨であり、将来のバージョンで削除される可能性があることに注意してください。参照してくださいpandas.pydata.org/pandas-docs/dev/... ILOC / IATを用いた位置によって選択する方法についてを。
Wouter Overmeire 2013

1
上記のリンクは廃止されました。これは、インデックス作成ドキュメントが再構成されたためです:pandas.pydata.org/pandas-docs/stable/…。現在のところ、最新バージョンは0.21.0であり、iloc位置によって列にアクセスするための文書化されたアプローチのままです。
iff_or 2017年

21

.locを使用したラベルベースまたは.ilocメソッドを使用したインデックスベースを使用して、列範囲を含む列スライスを実行できます。

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

6

列インデックスのリストを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

1

メソッド.transpose()は列を行に、行を列に変換するため、次のように書くこともできます

df.transpose().ix[3]

2
転置はデータ型を混乱させる可能性があります。
IanS 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.