4 / 8

파이썬 pandas 데이터 분석 입문 · 4장

loc·iloc로 선택하고 조건으로 필터링하기

열 선택, 불리언 인덱싱, isin, loc와 iloc 차이, query, sort_values

3분 읽기

분석의 대부분은 "원하는 부분만 골라내기"입니다. 이 장에서는 열 선택, 조건 필터링(불리언 인덱싱), loc와 iloc, query, 정렬을 2장의 sales 표(revenue 열 포함)로 실습합니다.

열 선택하기

열 하나는 대괄호에 이름을, 여러 열은 이름 리스트를 넣습니다.

Pythonsales[['store', 'menu', 'revenue']].head(3)
결과  store        menu  revenue
0  강남  아메리카노   135000
1  홍대        라떼    60000
2  강남        라떼    90000

조건으로 행 거르기 — 불리언 인덱싱

조건식은 행마다 True/False를 돌려줍니다. 이것을 대괄호에 넣으면 True인 행만 남습니다.

Pythonsales[sales['qty'] >= 20]
결과         date store        menu  qty  price  revenue
0  2026-03-01  강남  아메리카노   30   4500   135000
3  2026-03-02  홍대  아메리카노   25   4500   112500
4  2026-03-03  강남  아메리카노   28   4500   126000

여러 조건 묶기

그리고는 &, 또는은 |를 쓰고, 조건마다 괄호로 감쌉니다.

Pythonsales[(sales['store'] == '강남') & (sales['menu'] == '아메리카노')]
결과         date store        menu  qty  price  revenue
0  2026-03-01  강남  아메리카노   30   4500   135000
4  2026-03-03  강남  아메리카노   28   4500   126000

여러 값 중 하나인지 — isin

Pythonsales[sales['menu'].isin(['라떼', '케이크'])][['date', 'store', 'menu']]
결과         date store    menu
1  2026-03-01  홍대    라떼
2  2026-03-02  강남    라떼
5  2026-03-03  홍대  케이크
6  2026-03-04  강남  케이크
7  2026-03-04  홍대    라떼

loc와 iloc — 행과 열을 한 번에

방식기준예
loc이름(인덱스 이름, 열 이름)과 조건sales.loc[조건, ['menu', 'qty']]
iloc위치 번호(0부터)sales.iloc[0:2, 1:3]
Pythonsales.loc[sales['qty'] < 10, ['date', 'menu', 'qty']]
결과         date    menu  qty
5  2026-03-03  케이크    7
6  2026-03-04  케이크    9
Pythonsales.iloc[0:2, 1:3]   # 0~1행, 1~2열
결과  store        menu
0  강남  아메리카노
1  홍대        라떼

iloc의 범위는 파이썬 슬라이스처럼 끝 번호를 포함하지 않습니다. 반면 loc에 이름으로 범위를 주면 끝 이름까지 포함합니다.

query — 조건을 문장처럼

조건이 길어지면 query가 읽기 편합니다. 여기서는 and, or를 그대로 씁니다.

Pythonsales.query('store == "홍대" and qty > 10')
결과         date store        menu  qty  price  revenue
1  2026-03-01  홍대        라떼   12   5000    60000
3  2026-03-02  홍대  아메리카노   25   4500   112500
7  2026-03-04  홍대        라떼   15   5000    75000

정렬하기 — sort_values

Pythonsales.sort_values('revenue', ascending=False).head(3)
결과         date store        menu  qty  price  revenue
0  2026-03-01  강남  아메리카노   30   4500   135000
4  2026-03-03  강남  아메리카노   28   4500   126000
3  2026-03-02  홍대  아메리카노   25   4500   112500

직접 해 보기

홍대 매장에서 가격이 5,000원 이상인 판매 기록만 골라 수량이 많은 순으로 정렬해 보세요.

Python(sales[(sales['store'] == '홍대') & (sales['price'] >= 5000)]
      .sort_values('qty', ascending=False))

전체 메뉴