Python

[pandas] iloc와 loc 인덱싱, 사용법과 차이점

루루23 2025. 1. 9. 15:32
반응형
  iloc loc
기준 정수 인덱스 기반 (integer-location) 라벨(Label) 기반
용도 데이터 프레임의 위치를 기준으로 데이터 선택 행과 열의 라벨을 사용하여 데이터 선택
범위 0부터 시작하는 정수 인덱스 사용 데이터 프레임의 인덱스와 컬럼 이름 사용
유형 슬라이싱 시 Python 스타일 범위 사용 슬라이싱 시 끝 값도 포함 (Inclusive)

 

1. iloc: 정수 인덱스 기반 데이터 선택

iloc은 데이터 프레임의 행과 열을 정수 인덱스를 사용하여 선택한다.

 

기본 문법

DataFrame.iloc[행_인덱스, 열_인덱스]

 

예시 데이터프레임

      Name   Age     City
0     Kim    25     Busan
1     Lee    28     Daegu
2     Jeon   35     Seoul

 

1.1 특정 행 선택

첫 번째 행 선택

 

print(df.iloc[0])
# 결과
Name     Kim
Age      25
City    Busan
Name: 0, dtype: object

iloc[0]의 반환값은 Series : 행 데이터를 데이터프레임으로 반환하려면 인덱스를 리스트로 묶어 사용해야 함.

 

첫 번째 행을 데이터프레임으로 반환

print(df.iloc[[0]])
# 결과
   Name   Age    City
0  Kim    25    Busan

 

1.2 특정 값 선택

첫 번째 행의 첫 번째 열 값 선택

 

print(df.iloc[0, 0])
# 결과
Kim

 

1.3 슬라이싱

첫 두 개의 행 선택

 

print(df.iloc[0:2])
# 결과
    Name   Age    City
0   Kim    25     Busan
1   Lee    28     Daegu

슬라이싱에서 마지막 값은 포함되지 않음.
슬라이싱(iloc[2:3])의 결과는 항상 데이터프레임으로 반환.

 

슬라이싱으로 한 행 선택

 

print(df.iloc[2:3])
# 결과
     Name    Age     City
2    Jeon    35      Seoul

 

2. loc: 라벨 기반 데이터 선택

loc은 데이터 프레임의 인덱스와 컬럼 이름을 사용하여 데이터를 선택한다.

 

기본 문법

DataFrame.loc[행_라벨, 열_라벨]

 

2.1 행 선택

첫 번째 행 선택

 

print(df.loc[0])
# 결과
Name     Kim
Age      25
City     Busan
Name: 0, dtype: object

 

2.2 특정 값 선택

첫 번째 행의 'Name' 값 선택

print(df.loc[0, 'Age'])
# 결과
25

 

2.3 슬라이싱

첫 번째부터 두 번째 행까지 선택

print(df.loc[0:1])

 

# 결과
     Name    Age    City
0    Kim     25     Busan
1    Lee     28     Daegu

loc의 슬라이싱은 끝 값을 포함

 

3. iloc과 loc의 공통 사용법

3.1 여러 행/열 선택

첫 번째와 세 번째 행 선택

print(df.iloc[[0, 2]])
print(df.loc[[0, 2]])

 

# 결과 (두 경우 동일)
      Name   Age     City
0     Kim    25     Busan
2     Jeon   35     Seoul

 

 

3.2 특정 열 선택

첫 번째와 두 번째 열 선택

# iloc : 첫 번째와 두 번째 열 선택
print(df.iloc[:, 0:2])

 

# 'Name'과 'Age' 열 선택
print(df.loc[:, ['Name', 'Age']])
# 결과 (두 경우 동일)
      Name   Age   
0     Kim    25     
1     Lee    28    
2     Jeon   35

 

 

4. 주의

  1. iloc에 라벨 사용 - 에러 발생: iloc은 정수 인덱스만 사용 가능
  2. loc에 정수 인덱스 사용 - 가능하지만 비권장: loc은 주로 라벨을 사용하는 것이 좋음
  3. 슬라이싱 범위 - iloc: 끝 값 포함하지 않음 / loc: 끝 값 포함
  4. 슬라이싱 결과와 단일 행 결과의 차이 - iloc[2]: Series 반환 / iloc[2:3]: DataFrame 반환
# 단일 행 Series 반환
print(type(df.iloc[2]))  # <class 'pandas.core.series.Series'>

# 슬라이싱 DataFrame 반환
print(type(df.iloc[2:3]))  # <class 'pandas.core.frame.DataFrame'>
반응형