개요: loc을 활용한 행과 열의 동시 선택
Pandas DataFrame에서 특정 조건을 만족하는 행과 동시에 원하는 열만 골라내야 하는 경우가 자주 있습니다. 이럴 때 유용하게 쓸 수 있는 것이 바로 loc 메서드입니다.
loc은 대괄호([ ]) 형태의 인덱스 연산자와 함께 사용하며, 쉼표를 기준으로 앞쪽에는 행 조건, 뒤쪽에는 표시할 열 이름을 지정하면 됩니다.
dataFrame.loc[행_조건, "열_이름"]
예제 데이터 준비
이번 예제에서는 아래와 같은 내용이 담긴 CSV 파일(SalesData.csv)을 사용합니다. 파일에는 차종(Car), 등록 가격(Reg_Price), 판매 대수(Units) 세 개의 열이 있습니다.
- BMW – 2500 / 100대
- Lexus – 3500 / 80대
- Audi – 2500 / 120대
- Jaguar – 2000 / 70대
- Mustang – 2500 / 110대
먼저 read_csv() 함수로 CSV 파일의 데이터를 Pandas DataFrame으로 불러옵니다.
import pandas as pd
dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\SalesData.csv")
print("\nCSV 파일 읽기...\n", dataFrame)행과 열의 하위 집합 선택하기
이제 Units 값이 100보다 큰 행만 필터링하면서, 그중 Car 열만 표시해 보겠습니다. loc의 두 번째 위치에 원하는 열 이름을 지정하면 됩니다.
res2 = dataFrame.loc[dataFrame["Units"] > 100, "Car"]
print("\n하위 집합...\n", res2)전체 예제 코드
지금까지 설명한 내용을 모두 포함한 전체 코드는 다음과 같습니다.
import pandas as pd
# CSV 파일의 데이터를 Pandas DataFrame으로 불러오기
dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\SalesData.csv")
print("\nReading the CSV file...\n", dataFrame)
# 조건에 맞는 행만 선택하기
print("\nUnits가 100보다 많은 차량: \n", dataFrame[dataFrame["Units"] > 100])
# 특정 두 개의 열만 표시하기
res = dataFrame[['Reg_Price', 'Units']]
print("\n두 개의 열만 표시: \n", res)
# 행과 열의 하위 집합을 동시에 선택하기
# loc의 뒤쪽에 표시할 열(Car)을 지정
res2 = dataFrame.loc[dataFrame["Units"] > 100, "Car"]
# 결과 출력
print("\nSubset...\n", res2)실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Reading the CSV file...
Car Reg_Price Units
0 BMW 2500 100
1 Lexus 3500 80
2 Audi 2500 120
3 Jaguar 2000 70
4 Mustang 2500 110
Select cars with Units more than 100:
Car Reg_Price Units
2 Audi 2500 120
4 Mustang 2500 110
Displaying only two columns :
Reg_Price Units
0 2500 100
1 3500 80
2 2500 120
3 2000 70
4 2500 110
Subset...
2 Audi
4 Mustang
Name: Car, dtype: object핵심 정리
- df[조건]: 조건에 맞는 행 전체를 선택합니다.
- df[[열1, 열2]]: 원하는 열만 따로 추출합니다.
- df.loc[조건, 열]: 행 조건과 열 지정을 한 번에 처리할 수 있어 가장 효율적입니다.
실행 결과를 보면 Units가 100을 초과한 Audi와 Mustang 행만 남고, 그중 Car 열의 값만 Series 형태로 반환된 것을 확인할 수 있습니다. 여러 열을 동시에 선택하고 싶다면 dataFrame.loc[dataFrame["Units"] > 100, ["Car", "Units"]]처럼 리스트 형태로 열 이름을 넘겨주면 됩니다.