파이썬 pandas 데이터 분석 입문 · 4장
loc·iloc로 선택하고 조건으로 필터링하기
열 선택, 불리언 인덱싱, isin, loc와 iloc 차이, query, sort_values
분석의 대부분은 "원하는 부분만 골라내기"입니다. 이 장에서는 열 선택, 조건 필터링(불리언 인덱싱), 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))