업무에 파이썬 활용할 줄 알기

판다스 데이터프레임 행, 열 선택 표기법(혼공데분 예시) 본문

Python

판다스 데이터프레임 행, 열 선택 표기법(혼공데분 예시)

SEO 데이터분석가 2024. 1. 10. 12:38

혼공데분 공부하면서 판다스 데이터 프레임 행, 열 선택 표기법 헷갈리는 것들을 다시 정리했다.

 

[]연산자 및 loc, iloc 사용하여 행,열 선택하는 방법

  • 표기법
  열(컬럼) 선택 행(로우) 선택 행열선택
단일 df['컬럼명'] df.loc['인덱스']
df.iloc[행번호]
df.loc['인덱스', '컬럼명']
df.iloc[행번호, 열번호]
멀티 df[['컬럼명1', '컬럼명2']] df.loc[['인덱스1', '인덱스2']]
df.iloc[[행번호1, 행번호2]]

df[불리언배열]
df.loc[불리언배열]
df.loc[['인덱스' 리스트], ['컬럼명' 리스트]
df.iloc[[행번호 리스트], [열번호 리스트]]
슬라이싱   df.loc['인덱스1':'인덱스2']
:인덱스명이 가리키는 행의미

df.iloc[0:2]
: 0과 2의 숫자는 행번호를 나타내는 것이 아닌 행과 행사이를 나타냄

df[슬라이싱]
Q. 행번호 외 인덱스명을 사용해도 되나?
df.loc[인덱스슬라이싱, 컬럼명슬라이싱]
df.iloc[행번호슬라이싱,열번호슬라이싱]
  • 혼공데분 예시
  열(컬럼) 선택 행(로우) 선택 행열선택
단일 selected_rows = ns_df['출판사'] == '한빛미디어'    
멀티 books = books_df[['no', 'ranking', 'bookname']] selected_rows = ns_df['출판사'] == '한빛미디어'
0. ns_books2 = ns_book[ ns_df['출판사'] == '한빛미디어']
1. ns_books2 = ns_book[selected_rows]
2. ns_books2 = ns_book.loc[selected_rows]
3. ns_books2 = ns_book.loc[selected_rows, :]
※ 0, 1 ,2, 3은 같은 것
books_df.loc[[0,1], ['bookname', 'authors']]
books_df.iloc[[0,1], [2,3]]
슬라이싱   ns_books2 = ns_book[2:]
ns_books2 = ns_book[0:2]
selected_columns = ns_df.columns != 'Unnamed: 13'
ns_df.loc[:, selected_columns]

 

  • 내가 이해한 방식

데이터 프레임에서 사실상 특정 행만을 선택하는 경우는 잘 없을 것 같다.

보통은 열을 선택하는 경우가 경험상 많았다.

 

따라서,가장 많이 쓰는 열을 선택할 때는 기본적으로 [] 연산자만을 사용하면 된다고 기억하고 있으면 될 것 같다.

다만 예외적으로 []연산자안에 불리언배열이나 슬라이싱을 전달하면 행을 선택한다

 

그 외 행을 선택하거나 행열을 선택할 때는 loc, iloc를 쓴다

 

슬라이싱 포함 여부 구분

1. df.loc['인덱스1':'인덱스2']
:인덱스명이 가리키는 행의미

: 마지막 인덱스 포함

2. df.iloc[0:2]
: 0과 2의 숫자는 행번호를 나타내는 것이 아닌 행과 행사이를 나타냄

: 마지막인덱스 불포함

3. df[슬라이싱]
e.g. ns_books2 = ns_book[0:2] → 인덱스 0,1을 선택, 2는 선택 X

 

Q. 3과 같이 []연산자안에 슬라이싱 사용할 때, 행번호 외 인덱스명을 사용해도 되나?

아마 안될 것 같다. 인덱스명으로 쓰고싶으면 loc를 무조건 쓰는게 맞지 않을까?

 

  • 정리

행선택에서 슬라이싱을 아래 3가지 방식으로 사용한다고 했을 때, 

loc에서 인덱스명을 사용하면 마지막인덱스를 포함하지만

[]연산자와 iloc메서드에서 행번호를 사용하면 마지막인덱스를 포함하지 않는다.

 

아래 예시는 판다스 데이터 프레임이 아닌 파이썬 리스트 슬라이싱에 대한 내용이지만 원리는 같다.

숫자로 슬라이싱하면 마지막 인덱스를 포함하지 않는다.

 

wannaknowcoding.tistory.com/48 내용 참고

 

 

 

참고자료

https://wannaknowcoding.tistory.com/4

 

07/08. 판다스 데이터프레임 인덱싱과 슬라이싱 / 값과 영역 접근

데이터프레임 컬럼선택 멀티 컬럼 선택 로우 선택 멀티 로우 선택 로우 슬라이싱 특정 값 가져오기 '컬럼선택은 그냥이고, 로우선택은 iloc, loc를 쓴다' 데이터프레임 2차원 데이터를 효과적으로

wannaknowcoding.tistory.com