loc
과 iloc
은 파이썬 라이브러리인 Pandas에서 데이터프레임(DataFrame)의 특정 데이터를 선택하기 위해 사용하는 메소드(method)입니다. 먼저 loc과 iloc에 대해 간단히 살펴보겠습니다.
DataFrame.loc[<행 라벨>, <열 라벨>]
<행 라벨>
= 인덱스 | <열 라벨>
= 컬럼 이름df.loc['A', 'Name']
df.loc['A':'C', 'Name':'Age']
DataFrame.iloc[<행 위치>, <열 위치>]
<행 위치>
와 <열 위치>
는 0부터 시작하는 정수형 인덱스df.iloc[0, 1]
df.iloc[0:2, 1:3]
import pandas as pd
# 샘플 데이터프레임 생성
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'Los Angeles', 'Chicago']}
df = pd.DataFrame(data)
# loc 사용 예시: 'Bob'의 'Age' 선택
print("loc 사용 예시 (Bob의 나이):")
print(df.loc[1, 'Age'])
# 출력
loc 사용 예시 (Bob의 나이):
30
# iloc 사용 예시: 두 번째 행의 첫 번째와 두 번째 열 선택 (Bob의 Name과 Age)
print("iloc 사용 예시 (두 번째 행의 Name과 Age):")
print(df.iloc[1, 0:2])
# 출력
iloc 사용 예시 (두 번째 행의 Name과 Age):
Name Bob
Age 30
Name: 1, dtype: object
위의 예시와 같이 'loc'은 라벨 기반으로 데이터를 선택하며, 'iloc'은 위치 기반으로 데이터를 선택합니다.
loc
과 iloc
비교초보자에게는 loc
을 사용하는 것을 추천드립니다. 왜냐하면 loc
은 인덱스와 컬럼 이름을 사용하기 때문에 코드를 읽고 이해하기가 더 쉽습니다.
물론 iloc
도 유용하므로, 상황에 따라 적절한 선택이 필요합니다.
loc
이 유용한 경우데이터프레임의 행이나 열에 의미있는 라벨이 있을 때, loc이 유용합니다. 예를 들어, 특정 날짜, 사용자 ID, 제품 이름 등의 라벨을 사용한 경우입니다.
코드 예시
import pandas as pd
# 시계열 데이터 샘플 생성
dates = pd.date_range('20230101', periods=6)
df = pd.DataFrame({'Sales': [100, 150, 200, 250, 300, 350]}, index=dates)
# loc 사용 예시: 특정 날짜 범위의 데이터 선택
# 2023년 1월 2일부터 1월 4일까지의 판매 데이터 선택
print("loc 사용 예시 (특정 날짜 범위의 데이터 선택):")
print(df.loc['2023-01-02':'2023-01-04'])
그리고 loc
은 iloc
과는 달리 df.loc[df['A'] > 10]
과 같이 조건에 따라 행을 선택할 수 있으므로 boolean을 이용해 특정 조건에 해당하는 경우만 선택하고 싶은 경우에도 유용합니다.
iloc
이 유용한 경우데이터프레임의 구조가 일정하고 특정 위치의 데이터 접근이 필요한 경우에 iloc이 적합합니다. 예를 들어, 매일 업데이트되는 큰 데이터셋에서 최근 몇 일의 데이터나 특정 열의 데이터를 분석하는 경우입니다.
코드 예시:
import pandas as pd
# 대규모 데이터프레임 샘플 생성
data = pd.DataFrame({'A': range(1, 101), 'B': range(101, 201), 'C': range(201, 301)})
# iloc 사용 예시: 최근 5일의 'A'와 'B' 열 데이터 선택
# 데이터프레임의 마지막 5행과 처음 2열을 선택
print("iloc 사용 예시 (마지막 5행과 처음 2열 선택):")
print(data.iloc[-5:, :2])
이외에도 iloc
은 데이터 전처리 단계에서 일부 데이터를 샘플링하거나, 특정 패턴의 데이터를 추출할 때 유용합니다. 예를 들어, 특정 간격으로 데이터를 추출하거나, 데이터프레임의 일부분만을 대상으로 빠른 연산을 수행해야 하는 경우입니다.
loc
에서 슬라이싱할 때 종료 인덱스는 포함됩니다. 예를 들어, df.loc[0:3]
는 0, 1, 2, 3번 인덱스의 데이터를 모두 포함합니다. 파이썬의 리스트 슬라이싱과 다르기 때문에 주의해야 합니다,
iloc
슬라이싱은 파이썬의 표준 슬라이싱 방식과 마찬가지로 종료 인덱스가 포함되지 않습니다.