Python Pandas DataFrame에서 loc와 iloc의 차이점
Python Pandas DataFrame에서 loc와 iloc의 차이점
기본적인 차이점:
- loc: 라벨 기반 인덱싱을 사용합니다. 즉, 행과 열을 선택하려면 해당 행과 열의 라벨을 지정해야 합니다.
예시:
다음 예시는 loc와 iloc의 차이점을 보여줍니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# loc 사용
print(df.loc[0, 'A']) # 첫 번째 행의 'A' 열 값 출력: 1
print(df.loc[1:, 'B']) # 두 번째 행부터 마지막 행까지의 'B' 열 값 출력: [5, 6]
# iloc 사용
print(df.iloc[0, 0]) # 첫 번째 행의 첫 번째 열 값 출력: 1
print(df.iloc[1:, 1]) # 두 번째 행부터 마지막 행까지의 두 번째 열 값 출력: [5, 6]
주요 차이점:
구분 | loc | iloc |
---|---|---|
인덱싱 방식 | 라벨 기반 | 정수 위치 기반 |
속도 | 일반적으로 느림 | 일반적으로 빠름 |
유연성 | 더 유연하고 명확한 코드 작성 가능 | 상대적으로 덜 유연함 |
변경 가능성 | 인덱스가 변경되면 코드가 손상될 수 있음 | 인덱스가 변경되어도 코드는 영향을 받지 않음 |
사용 시 고려 사항:
- loc:
- 인덱스 라벨을 사용하여 데이터를 선택할 때 유용합니다.
- 행과 열을 선택하는 데 조건을 사용할 수 있습니다.
- 코드를 더 명확하고 이해하기 쉽게 만들 수 있습니다.
- iloc:
- 반복 작업을 수행할 때 더 빠를 수 있습니다.
- 인덱스가 변경되지 않는다는 것을 확신할 때 사용해야 합니다.
결론:
loc와 iloc는 모두 Pandas DataFrame에서 데이터를 선택하고 조작하는 데 유용한 함수입니다. 어떤 함수를 사용할지는 상황에 따라 다릅니다. 일반적으로 코드를 명확하고 이해하기 쉽게 만들려면 loc를 사용하고, 속도가 중요한 경우에는 iloc를 사용하는 것이 좋습니다.
예제 코드
행 선택:
# 첫 번째 행 선택
df.loc[0, :]
# 마지막 행 선택
df.loc[df.shape[0] - 1, :]
# 'A' 값이 2인 행 선택
df.loc[df['A'] == 2, :]
# 'B' 열 선택
df.loc[:, 'B']
# 'A'와 'C' 열 선택
df.loc[:, ['A', 'C']]
# 'B' 값이 5보다 큰 열 선택
df.loc[:, df['B'] > 5]
값 설정:
# 첫 번째 행의 'A' 값을 10으로 변경
df.loc[0, 'A'] = 10
# 'A' 값이 2인 모든 행의 'B' 값을 50으로 변경
df.loc[df['A'] == 2, 'B'] = 50
행 및 열 선택:
# 첫 번째 행의 첫 번째 열 값 선택
df.iloc[0, 0]
# 마지막 행의 마지막 열 값 선택
df.iloc[df.shape[0] - 1, df.shape[1] - 1]
# 'A' 값이 2인 행의 'B' 열 값 선택
df.iloc[df[df['A'] == 2].index[0], 1]
슬라이싱:
# 첫 번째 두 행 선택
df.iloc[:2, :]
# 마지막 두 행 선택
df.iloc[-2:, :]
# 'A' 값이 2보다 큰 모든 행 선택
df.iloc[df['A'] > 2, :]
# 'B' 열의 첫 번째 세 개 값 선택
df.iloc[:, :3]
조건부 선택:
# 'A' 값이 2이고 'B' 값이 5보다 큰 행 선택
df.loc[(df['A'] == 2) & (df['B'] > 5), :]
# 'A' 값이 2 또는 'B' 값이 5보다 큰 행 선택
df.loc[(df['A'] == 2) | (df['B'] > 5), :]
Pandas DataFrame에서 loc와 iloc를 대체하는 방법
query() method:
- loc를 사용하는 것보다 더 간결하고 명확한 코드를 작성할 수 있습니다.
# 'A' 값이 2이고 'B' 값이 5보다 큰 행 선택
df.query('A == 2 and B > 5')
# 'A' 값이 2 또는 'B' 값이 5보다 큰 행 선택
df.query('A == 2 or B > 5')
itertuples() method:
- DataFrame을 반복 가능한 튜플 형식으로 변환합니다.
- for 루프를 사용하여 데이터를 쉽게 처리할 수 있습니다.
for row in df.itertuples():
print(row.A, row.B, row.C)
NumPy indexing:
- NumPy 배열 인덱싱을 사용하여 데이터를 선택할 때 유용합니다.
- iloc를 사용하는 것보다 더 빠를 수 있습니다.
# 첫 번째 행 선택
df.iloc[0, :]
# 마지막 행 선택
df.iloc[df.shape[0] - 1, :]
# 'A' 값이 2인 행 선택
df[df['A'] == 2]
.at and .iat methods:
- 단일 값을 선택하거나 설정할 때 유용합니다.
- loc 또는 iloc를 사용하는 것보다 더 간결하고 효율적입니다.
# 첫 번째 행의 'A' 값을 10으로 변경
df.at[0, 'A'] = 10
# 'A' 값이 2인 행의 'B' 열 값을 50으로 변경
df.at[df[df['A'] == 2].index[0], 'B'] = 50
.mask() method:
- 특정 조건을 만족하는 값을 마스킹할 때 유용합니다.
# 'A' 값이 2보다 큰 모든 값을 0으로 변경
df.mask(df['A'] > 2, 0)
.groupby() method:
- 데이터를 그룹화하여 집계 작업을 수행할 때 유용합니다.
# 'A' 값별 평균 'B' 값 계산
df.groupby('A')['B'].mean()
python pandas dataframe