반응형
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. 주의
- iloc에 라벨 사용 - 에러 발생: iloc은 정수 인덱스만 사용 가능
- loc에 정수 인덱스 사용 - 가능하지만 비권장: loc은 주로 라벨을 사용하는 것이 좋음
- 슬라이싱 범위 - iloc: 끝 값 포함하지 않음 / loc: 끝 값 포함
- 슬라이싱 결과와 단일 행 결과의 차이 - 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'>
반응형
'Python' 카테고리의 다른 글
[pandas] transform 함수로 데이터 변환하기 (0) | 2024.12.11 |
---|---|
[pandas] groupby 정리 (0) | 2024.12.11 |
[pandas] 데이터 병합 - merge, join (2) | 2024.12.06 |
[pandas] DataFrame.rank, 관련 문제 Leetcode 《178. Rank Scores》 (0) | 2024.12.03 |