위치별로 팬더 열 선택


101

단순히 이름이 지정된 팬더 열에 정수로 액세스하려고합니다.

를 사용하여 위치별로 행을 선택할 수 있습니다 df.ix[3].

그러나 정수로 열을 선택하는 방법은 무엇입니까?

내 데이터 프레임 :

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

질문하도록 업데이트되었습니다.
Jason Strimpel 2013

이 예에서 열 순서는 정의되지 않을 수 있습니다. ( 'a'는 첫 번째 또는 두 번째 열일 수 있습니다.)
user48956 jul.

답변:


152

떠오르는 두 가지 접근 방식 :

>>> 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
참고로 df.ix 지금 df.iloc으로 대체됩니다
yosemite_k

동일한 이름을 가진 두 개의 열이있는 경우 df.iloc [:, 2] 메서드가 작동하면 하나의 열만 반환되지만 df [df.columns [2]] 메서드는 같은 이름의 두 열을 모두 반환합니다.
BobbyG

54

를 사용 df.icol(n)하여 정수로 열에 액세스 할 수도 있습니다 .

업데이트 : icol더 이상 사용되지 않으며 다음과 같은 방법으로 동일한 기능을 사용할 수 있습니다.

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

2
향후 버전 0.11.0에서 이러한 메서드는 더 이상 사용되지 않으며 향후 버전에서 제거 될 수 있습니다. iloc / iat를 사용하여 위치별로 선택하는 방법 은 pandas.pydata.org/pandas-docs/dev/… 를 참조하십시오 .
Wouter Overmeire 2013

1
색인 문서는 이후 구조 조정 되었기 때문에 위의 링크가되지 않습니다 : pandas.pydata.org/pandas-docs/stable/...를 . 현재까지 가장 최근 버전이 0.21.0 인 iloc현재 위치별로 열에 액세스하는 문서화 된 접근 방식이 남아 있습니다.
iff_or

21

당신이 사용할 수있는 열 범위를 포함하여 열 슬라이싱을 할 .iloc 방법을 사용하여 기반 .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

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.