python pandas의 열 이름에서 열 인덱스 가져 오기


220

R에서 열 이름을 기반으로 열 색인을 검색해야 할 때 수행 할 수있는 작업

idx <- which(names(my_data)==my_colum_name)

팬더 데이터 프레임과 동일한 작업을 수행하는 방법이 있습니까?

답변:


360

물론, 당신은 사용할 수 있습니다 .get_loc():

In [45]: df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})

In [46]: df.columns
Out[46]: Index([apple, orange, pear], dtype=object)

In [47]: df.columns.get_loc("pear")
Out[47]: 2

솔직히 말해서 나는 종종 이것을 직접 필요로하지 않습니다. 색인 번호를 원하는 경우를 확실히 볼 수 있지만 일반적으로 이름으로 액세스하여 원하는 것을 수행합니다 ( df["pear"], df[["apple", "orange"]]또는 어쩌면 df.columns.isin(["orange", "pear"])).


7
열 번호는 .iloc연산자를 사용할 때 유용 합니다. 여기서 행과 열 모두에 정수만 전달해야합니다.
abe

4
또는 DF가 numpy 배열과 특정 기능을 가진 열의 인덱스로 변환되기를 원하는 라이브러리를 사용할 때. 예를 들어 CatBoost는 범주 형 기능의 인덱스 목록을 원합니다.
Tom Walker

1
ExcelWriter로 워크 시트를 만든 후 조건부 서식을 추가 할 때 이것이 필요했습니다. Excel 좌표로 열 (및 셀)을 참조해야합니다.
Alejandro

서브 플로트 배열을 만들 때 이것을 사용합니다. 각 열의 데이터에서 하나의 서브 플롯.
David Collins

2
insert기존 열 다음에 새 열을 원할 때 사용합니다 .
Amir A. Shabani

33

다음은 목록 이해를 통한 솔루션입니다. cols는 색인을 가져올 열 목록입니다.

[df.columns.get_loc(c) for c in cols if c in df]

4
cols보다 적은 수의 요소를 가지 므로 df.columns수행하는 for c in cols if c in df것이 더 빠릅니다.
Eric O Lebigot

15

DSM의 솔루션은 작동하지만 직접 동등한 것을 which원한다면 할 수 있습니다(df.columns == name).nonzero()


10

여러 열 일치 항목을 찾으려면 searchsorted방법 을 사용하여 벡터화 된 솔루션을 사용할 수 있습니다. 따라서 df데이터 프레임과 query_cols검색 할 열 이름으로 구현은 다음과 같습니다.

def column_index(df, query_cols):
    cols = df.columns.values
    sidx = np.argsort(cols)
    return sidx[np.searchsorted(cols,query_cols,sorter=sidx)]

샘플 런-

In [162]: df
Out[162]: 
   apple  banana  pear  orange  peach
0      8       3     4       4      2
1      4       4     3       0      1
2      1       2     6       8      1

In [163]: column_index(df, ['peach', 'banana', 'apple'])
Out[163]: array([4, 1, 0])

8

열 위치에서 열 이름을 원한다면 (OP 질문과 다른 방법으로) 다음을 사용할 수 있습니다.

>>> df.columns.get_values()[location]

@DSM 사용 예 :

>>> df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})

>>> df.columns

Index(['apple', 'orange', 'pear'], dtype='object')

>>> df.columns.get_values()[1]

'orange'

다른 방법들:

df.iloc[:,1].name

df.columns[location] #(thanks to @roobie-nuby for pointing that out in comments.) 

2
왜 안돼 df.columns[location]?
Roobie Nuby

1

이건 어때요:

df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})
out = np.argwhere(df.columns.isin(['apple', 'orange'])).ravel()
print(out)
[1 2]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.