판다스 데이터프레임에서 여러 컬럼을 가져오고 싶을 때 어떻게 해야 할까요? 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_에 대해 더 자세히 알고 싶다면 공식 홈페이지를 참고하면 되겠습니다.
'문돌이 존버 > 데이터 분석' 카테고리의 다른 글
핸즈온 머신러닝 2 복습하기(챕터 7: 앙상블 학습과 랜덤 포레스트) (0) | 2021.06.18 |
---|---|
핸즈온 머신러닝 2 복습하기(챕터 8: 차원 축소) (0) | 2021.06.17 |
RNN 개념 잡고 간단 예제 코드 돌려보기 (2) (1) | 2021.04.25 |
RNN 개념 잡고 간단 예제 코드 돌려보기 (1) (0) | 2021.04.11 |
사용자-아이템 기반 협업 필터링(Collaborative Filtering) feat. Matrix Factorization (0) | 2021.04.10 |