loc는 DataFrame이나 Series에서 인덱스나 컬럼의 이름을 사용하여 데이터를 선택하는 방법입니다. 이는 파이썬 pandas 라이브러리에서 제공하는 핵심적인 데이터 접근 방식으로, 특히 데이터 분석 작업에서 원하는 데이터를 정확하게 추출하고 조작하는 데 매우 유용합니다.
기본 사용법
loc를 사용하여 데이터를 선택할 때는 대괄호 [ ] 안에 원하는 행 인덱스와 열 이름을 지정합니다. 쉼표(,)를 사용하여 행과 열을 구분하며, 콜론(:)을 사용하여 범위를 지정할 수 있습니다. 단일 값, 리스트, 불리언 마스크 등 다양한 형태로 인덱싱이 가능합니다.
import pandas as pd
# 샘플 데이터프레임 생성
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}, index=['row1', 'row2', 'row3'])
# 단일 값 선택
value = df.loc['row1', 'A'] # row1의 A열 값
# 특정 행 전체 선택
row = df.loc['row1'] # row1의 모든 열
# 여러 행과 열 선택
subset = df.loc[['row1', 'row2'], ['A', 'B']]
# 범위 선택
range_subset = df.loc['row1':'row2', 'A':'C']
Python
복사
고급 사용법
loc는 더 복잡한 데이터 선택 작업에도 활용될 수 있습니다. 불리언 인덱싱, 조건문, 함수 등을 활용하여 더 세밀한 데이터 선택이 가능합니다.
import pandas as pd
# 샘플 데이터프레임 생성
df = pd.DataFrame({
'Name': ['John', 'Anna', 'Peter', 'Linda'],
'Age': [25, 30, 35, 28],
'Score': [85, 92, 78, 95]
}, index=['id1', 'id2', 'id3', 'id4'])
# 불리언 인덱싱
high_scores = df.loc[df['Score'] > 90]
# 복합 조건
selected = df.loc[(df['Age'] < 30) & (df['Score'] >= 85)]
# 함수 적용
def select_condition(row):
return row['Age'] >= 30 and row['Score'] > 80
filtered = df.loc[df.apply(select_condition, axis=1)]
# 값 수정
df.loc[df['Score'] < 80, 'Score'] += 5
Python
복사
이러한 고급 사용법을 통해 데이터를 더 효과적으로 분석하고 조작할 수 있습니다. 특히 대규모 데이터셋을 다룰 때 유용합니다.
contains를 사용한 문자열 검색
loc와 함께 pandas의 str.contains() 메소드를 사용하면 특정 문자열이 포함된 데이터를 쉽게 찾을 수 있습니다. 이는 텍스트 데이터를 다룰 때 특히 유용합니다.
import pandas as pd
# 샘플 데이터프레임 생성
df = pd.DataFrame({
'Name': ['John Smith', 'Anna Johnson', 'Peter Smith', 'Linda Williams'],
'Email': ['john@email.com', 'anna@email.com', 'peter@gmail.com', 'linda@email.com'],
'Description': ['Senior Developer', 'Data Analyst', 'Junior Developer', 'Project Manager']
})
# 'Smith'가 포함된 이름 찾기
smith_names = df.loc[df['Name'].str.contains('Smith')]
# 'gmail'이 포함된 이메일 찾기
gmail_users = df.loc[df['Email'].str.contains('gmail')]
# 'Developer'가 포함된 직무 찾기 (대소문자 무시)
developers = df.loc[df['Description'].str.contains('developer', case=False)]
# 정규표현식 사용
# '@' 뒤에 'gmail'이 포함된 이메일 찾기
gmail_pattern = df.loc[df['Email'].str.contains(r'@gmail', regex=True)]
Python
복사
str.contains() 메소드는 다음과 같은 유용한 매개변수들을 제공합니다
•
case: 대소문자 구분 여부 (기본값: True)
•
na: NaN 값 처리 방법 (기본값: None)
•
regex: 정규표현식 사용 여부 (기본값: True)
•
pat: 검색할 패턴