본문 바로가기

문돌이 존버/데이터 분석

판다스 iloc로 여러 컬럼 선택하기 feat. np.r_

반응형

판다스 데이터프레임에서 여러 컬럼을 가져오고 싶을 때 어떻게 해야 할까요? loc 메서드를 쓰면 컬럼 이름을 직접 입력하면 되고, iloc 메서드를 쓰면 컬럼 인덱스를 사용해면 되겠죠.

그런데 만약 iloc를 사용해서 컬럼 인덱스를 가져올 때 연속된 인덱스가 아니라 서로 떨어져 있는 인덱스의 경우 곤란해집니다. 즉 0~3까지 인덱스에 10번째 인덱스가 필요한 상황인 것이죠.

이때 사용할 수 있는 방법이 np.r_ 입니다.

df.iloc[:, np.r_[:3, 10]]

위의 코드는 데이터프레임의 모든 행과 0, 1, 2, 10 인덱스에 해당하는 열을 가져오는 것입니다. 이해를 돕기 위해 np.r_ 만 단독으로 사용하였을 경우 결과값을 첨부했습니다.

np.r_[:3, 10]

 np.r_에 파라미터로는 총 3개의 문자열이 올 수 있는데요. 첫 번째 문자는 cocatenate할 axis를 뜻합니다. 두 번째 문자는 확장할 dimension을 뜻하며 결과값의 차원이 됩니다. 간단하게 공식 홈페이지에 소개된 예를 살펴보면 아래와 같습니다.

첫 번째 예시에서 -1이 입력되었는데, 이는 결국 axis=1을 뜻하고 따라서 열을 기준으로 합쳐지게 됩니다. 두 번째 예시에서 '0, 2'라고 파라미터가 들어왔고, 2는 결과값의 차원이 되는 것이죠.

마지막으로 세 번째 문자는 두 번째 문자에서 명시한 것처럼 차원을 확장할 때 어떤 형태로 확장할 것인가를 결정하는 것입니다. 말이 어려운데 간단히 말하자면 3차원으로 확장한다고 했을 때, 결과값 형태를 (3, 1, 1), (1, 3, 1), (1, 1, 3) 중 어떤 식으로 내보낼 것인지를 말합니다. 관련된 예시는 해당 블로그를 참고하면 좋을 것 같습니다.

공식 홈페이지 예시를 보면 아래와 같습니다.

위의 예시를 이해하기 위해서 세 번째 문자를 제거한 결과를 살펴보았습니다.

print(np.r_['0,2', [1,2,3], [4,5,6]].shape)
np.r_['0,2', [1,2,3], [4,5,6]]

2차원으로 나오긴 할 건데, 구체적으로 어떤 형태를 원하는지를 결정하는 것이 세 번째 문자의 역할이라 보시면 될 것 같습니다. 전체 차원은 동일해야 하니 (2, 3) 형태에서 0번째 즉 맨 앞의 차원에 몰아주는 것이기 때문에 공식 홈페이지에 소개된 (6, 1) 형태가 되는 것입니다.

np.r_에 대해 더 자세히 알고 싶다면 공식 홈페이지를 참고하면 되겠습니다.

728x90
반응형