문제 소개
이 튜토리얼에서는 products.csv 파일을 대상으로, price(가격) 열의 값이 30,000에서 70,000 사이인 행을 찾고, 그중 마지막 세 개 행의 id와 product 열만 출력하는 파이썬 코드를 작성하는 방법을 알아봅니다. 서로 다른 접근 방식을 가진 두 가지 해결 방법을 단계별로 살펴보겠습니다.
먼저 실습에 사용할 products.csv 파일을 준비합니다.
가격 조건(30,000~70,000)에 맞는 데이터 중 마지막 세 행의 id와 product 열을 출력하면 다음과 같은 결과를 얻을 수 있습니다.
id product 79 80 Truck 81 82 Bike 98 99 Truck
해결 방법 1: between()과 iloc 슬라이싱 활용
- 1단계: pandas를 임포트하고 products.csv 파일을 읽어 df 변수에 저장합니다.
- 2단계:
df.iloc[:,4]로 다섯 번째 열(price)을 선택한 뒤between()메서드를 적용해 값이 30,000~70,000 사이인 모든 행을 필터링합니다. - 3단계: 필터링된 결과를 df1에 저장합니다.
- 4단계:
df1.iloc[-3:,0:2]슬라이싱으로 처음 두 열(id, product)의 마지막 세 행을 선택해 출력합니다.
예제 코드
import pandas as pd
df = pd.read_csv('products.csv')
df1 = df[df.iloc[:,4].between(30000,70000)]
print(df1.iloc[-3:,0:2])실행 결과
id product 79 80 Truck 81 82 Bike 98 99 Truck
between(left, right) 메서드는 경계값을 포함한 범위 조건을 불리언 시리즈로 반환하므로, 복잡한 비교 연산 없이도 범위 필터링을 간결하게 표현할 수 있습니다.
해결 방법 2: 비교 연산자와 tail() 함수 활용
- 1단계: products.csv 파일을 읽어 df에 저장합니다.
- 2단계: 비교 연산자와 논리곱(&) 연산자를 결합해 price 열 값이 30,000보다 크고 70,000보다 작은 행을 필터링합니다.
- 3단계: 결과를 df1에 저장한 뒤, 열 이름으로 id와 product 열을 선택합니다.
- 4단계:
tail(3)함수를 호출해 마지막 세 개 행만 추출해 출력합니다.
예제 코드
import pandas as pd
df = pd.read_csv('products.csv')
df1 = df[(df['price']>30000) & (df['price']<70000)]
print(df1[['id','product']].tail(3))실행 결과
id product 79 80 Truck 81 82 Bike 98 99 Truck
tail() 함수 핵심 정리
pandas의 tail(n) 함수는 DataFrame의 마지막 n개 행을 반환하며, n을 지정하지 않으면 기본값 5가 적용됩니다. 조건으로 필터링한 결과에서 하위 몇 개 행만 빠르게 확인하고 싶을 때 매우 유용하며, 반대로 상위 행을 가져올 때는 head() 함수를 사용하면 됩니다.
두 해결 방법 모두 동일한 결과를 출력하지만, 방법 1은 위치 기반 인덱싱(iloc)과 between()을 활용하고, 방법 2는 열 이름 선택과 tail()을 활용한다는 점에서 차이가 있습니다. 코드의 가독성과 상황에 맞는 방식을 골라 사용하면 됩니다.