본문 바로가기
Python/Pandas, Matplotlib, Seaborn

[Pandas]_Pandas library basic (2) loc & iloc 의 차이는?

by ssolLEE 2023. 8. 9.
반응형

loc와 iloc

위 두 문법은 기본적으로 Pandas에서 특정 행이나 열을 추출할 때 사용합니다. 

1. loc

  • location의 약자입니다.
  • Pandas Docs에는 'Access a group of rows and columns by label(s) or a boolean array.'라고 되어 있습니다. 다시 말하면, 레이블 값으로 데이터프레임의 행이나 칼럼을 고를 수 있다는 것입니다. 
  • 우선 데이터를 불러옵니다.
df_boston.head(1)

  • 두 가지 방법이 있지만 두 번째 방법이 확장성측면(다른 열을 추가적으로 가져올 때 등)에서 더 편리합니다. 
# 첫 번째 방법

result = df_boston.loc[:3, 'CRIM' : 'INDUS']
result

# 두 번째 방법

result = df_boston.loc[0:3, ['CRIM', 'ZN', 'INDUS']]   # 확장성 측면
result

2. iloc

  • integer location의 약어입니다.
  • loc와 다르게 숫자로 데이터에 접근합니다. 아무래도 사람보단 컴퓨터 친화적인 방법인 느낌이죠?
  • 위와 같은 결과를 만드는 코드입니다. 
result = df_boston.iloc[0:4, 0:3]  # list slicing과 동일
result

 

3. loc와 iloc 중에 무엇을 쓰는 게 좋을까? 

  • 뭐든 개인이 편한 것 쓰는 게 제일 좋습니다. 
  • 하지만 loc를 더 선호하는 편입니다. 확장성 측면에서 그렇습니다. 
  • 다음의 조건문을 써서 데이터의 일부를 추출하였습니다. 
result = df_boston.loc[(df_boston['INDUS'] >= 5.0), ['CRIM', 'ZN', 'INDUS']].reset_index(drop=True)
result

  • 마찬가지의 방법으로 iloc에 적용하면 어떨까요? 
result = df_boston.iloc[(df_boston['INDUS'] >= 5.0), 0:3].reset_index(drop=True) # error가 뜸
result

에러가 납니다. 가능은 하지만 한 줄로 끝나지 않습니다.

  • 가독성을 위해 다음과 같이 코드를 정리하는 것도 좋습니다. 코드는 혼자 보는 게 아니니까요.
result = df_boston.loc[(df_boston['INDUS'] >= 5.0) & (df_boston['B'] >=394)  # 행
                        , ['CRIM', 'ZN', 'INDUS']].reset_index(drop=True)    # 열
result.head(1)