판다스(DataFrame)에서 데이터에 접근하고 조작하는 데 사용되는 인덱서(indexer)에 대해 설명해드리겠습니다.
인덱서(Indexer)
인덱서는 데이터프레임에서 행과 열에 접근하기 위한 메서드(method)를 의미합니다. loc와 iloc이 가장 널리 사용되는 인덱서인데, loc은 레이블 기반 인덱싱을 수행하고 iloc은 위치 기반 인덱싱을 수행합니다. 이 외에도 at, iat과 같은 인덱서도 있습니다.
iloc
iloc은 데이터프레임에서 위치 기반 인덱싱을 수행하는 데 사용되는 속성(attribute)입니다. 행과 열의 위치를 사용하여 데이터에 접근하고 조작하는 데에 활용됩니다. iloc은 정수 인덱스를 기반으로 하며, 행과 열의 인덱스를 숫자로 지정하여 데이터에 접근할 수 있습니다.
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 22],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# 첫 번째 행에 접근
first_row = df.iloc[0]
# 두 번째 행, 첫 번째 열의 데이터에 접근
value = df.iloc[1, 0]
loc
레이블(인덱스 값)을 기반으로 데이터에 접근합니다.
# 'Alice'의 정보에 접근
alice_data = df.loc[df['Name'] == 'Alice']
주어진 데이터프레임을 사용하여 loc 인덱서의 활용 방법을 설명해드리겠습니다.
import pandas as pd
data = [[2, 4, 4, 2], [3, 5, 3, 1]]
index = ['재석', '세호']
columns = ['감자', '고구마', '시금치', '배추']
qty = pd.DataFrame(data, index=index, columns=columns)
위와 같이 데이터프레임 qty를 생성했습니다. 이제 몇 가지 loc 인덱서의 활용 사례를 살펴보겠습니다.
단일 레이블 사용
# '재석'의 정보를 가져옴
jaeseok_data = qty.loc['재석']
print(jaeseok_data)
여러 레이블 사용:
python
Copy code
# '재석'과 '세호'의 정보를 가져옴
jaeseok_and_seho_data = qty.loc[['재석', '세호']]
print(jaeseok_and_seho_data)
특정 행 및 열 선택
# '세호'의 '고구마' 데이터를 가져옴
seho_goguma_qty = qty.loc['세호', '고구마']
print(seho_goguma_qty)
조건에 따른 데이터 필터링
# 감자의 재고량이 3보다 큰 경우만 가져옴
high_potato_qty = qty.loc[qty['감자'] > 3]
print(high_potato_qty)
행과 열 범위 선택
# '재석'과 '세호'의 '고구마'와 '시금치' 데이터를 가져옴
jaeseok_seho_goguma_sigeumchi = qty.loc[['재석', '세호'], ['고구마', '시금치']]
print(jaeseok_seho_goguma_sigeumchi)
위와 같이 loc 인덱서를 활용하면 데이터프레임에서 특정 행, 열 또는 조건을 기반으로 데이터를 선택하고 조작할 수 있습니다. 이를 통해 필요한 데이터를 추출하거나 조건에 따라 데이터를 필터링하고 분석할 수 있습니다.
at
하나의 스칼라 값을 빠르게 가져오는 데 사용됩니다.
# 첫 번째 행, 두 번째 열의 데이터에 접근
value = df.at[0, 'Age']
iat
위치 기반으로 하나의 스칼라 값을 빠르게 가져오는 데 사용됩니다.
# 첫 번째 행, 두 번째 열의 데이터에 접근
value = df.iat[0, 1]
이러한 인덱서들은 데이터프레임의 특정 위치에 있는 데이터에 효과적으로 접근하고 값을 변경하는 데 사용됩니다. 선택한 인덱서에 따라 레이블 또는 위치를 기반으로 원하는 작업을 수행할 수 있습니다.
해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.
'Big Data > DataAnalysis & Manipulate' 카테고리의 다른 글
pandas cut() (0) | 2023.08.07 |
---|---|
Boolean / Fancy indexing (0) | 2023.08.07 |
명시적 / 묵시적 인덱스 접근 (0) | 2023.08.07 |
Pandas DataFrame 구조 (0) | 2023.08.04 |
선형대수와 numpy 비교(scalar, vector...) (0) | 2023.08.04 |