DATA/Python
Pandas에서 데이터 인덱싱 정리 & 예시
열쩡왔쩡
2025. 2. 1. 12:17
Pandas에서 데이터 인덱싱 정리 & 예시
1. 이름(label)으로 인덱싱 (.loc[])
기본 형태
데이터 선택 방식 사용법 (.loc[]) 단축 형태
하나의 행 선택 | df.loc["row4"] | - |
여러 행 선택 (리스트) | df.loc[["row4", "row5", "row3"]] | - |
여러 행 선택 (슬라이싱) | df.loc["row2":"row5"] | df["row2":"row5"] |
하나의 열 선택 | df.loc[:, "col1"] | df["col1"] |
여러 열 선택 (리스트) | df.loc[:, ["col4", "col6", "col3"]] | df[["col4", "col6", "col3"]] |
여러 열 선택 (슬라이싱) | df.loc[:, "col2":"col5"] | - |
🔹 예제
import pandas as pd
data = {
"col1": [1, 2, 3, 4, 5],
"col2": [10, 20, 30, 40, 50],
"col3": [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data, index=["row1", "row2", "row3", "row4", "row5"])
# 하나의 행 선택
print(df.loc["row4"])
# 여러 행 선택
print(df.loc[["row4", "row5", "row3"]])
# 여러 행 슬라이싱
print(df.loc["row2":"row4"])
# 하나의 열 선택
print(df["col1"])
# 여러 열 선택
print(df[["col1", "col3"]])
# 여러 열 슬라이싱
print(df.loc[:, "col1":"col2"])
🔹 2. 위치(index)로 인덱싱 (.iloc[])
기본 형태
데이터 선택 방식 사용법 (.iloc[]) 단축 형태
하나의 행 선택 (위치) | df.iloc[8] | - |
여러 행 선택 (리스트) | df.iloc[[4, 5, 3]] | - |
여러 행 선택 (슬라이싱) | df.iloc[2:5] | df[2:5] |
하나의 열 선택 (위치) | df.iloc[:, 3] | - |
여러 열 선택 (리스트) | df.iloc[:, [3, 5, 6]] | - |
여러 열 선택 (슬라이싱) | df.iloc[:, 3:7] | - |
🔹 예제
import pandas as pd
data = {
"col1": [1, 2, 3, 4, 5],
"col2": [10, 20, 30, 40, 50],
"col3": [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)
# 하나의 행 선택 (위치 기반)
print(df.iloc[3])
# 여러 행 선택 (리스트)
print(df.iloc[[4, 3, 2]])
# 여러 행 선택 (슬라이싱)
print(df.iloc[1:4])
# 하나의 열 선택
print(df.iloc[:, 1])
# 여러 열 선택
print(df.iloc[:, [0, 2]])
# 여러 열 선택 (슬라이싱)
print(df.iloc[:, 1:3])
📝 정리
- .loc[]
- 행, 열 이름(Label) 기반 선택
- 슬라이싱 시 마지막 값도 포함됨
- .iloc[]
- 행, 열 위치(Index) 기반 선택
- 슬라이싱 시 마지막 값은 포함되지 않음
DataFrame 수정 코드 정리
아래 코드는 주어진 DataFrame에서 ID 1, 20, 21에 대한 수정 작업을 수행합니다.
정답 코드
import pandas as pd
# CSV 파일 로드 (ID를 인덱스로 설정)
df = pd.read_csv('data/body_imperial1.csv', index_col=0)
# 1. ID 1의 Weight 값을 200으로 변경
df.loc[1, 'Weight (Pound)'] = 200
# 2. ID 21의 행 삭제
df.drop(21, axis='index', inplace=True)
# 3. ID 20의 행 추가 (Height: 70, Weight: 200)
df.loc[20] = [70, 200]
# 최종 DataFrame 출력
df
📝 코드 설명
- ID 1의 무게를 200으로 변경
- .loc[1, 'Weight (Pound)']를 사용해 ID 1의 'Weight (Pound)' 값만 200으로 변경합니다.
- df.loc[1, 'Weight (Pound)'] = 200
- ID 21의 행 삭제
- df.drop(21, axis='index', inplace=True)
→ ID가 21인 행을 삭제합니다. - axis='index'를 지정해 행(row) 기준으로 삭제하도록 설정합니다.
- inplace=True를 사용하여 DataFrame을 직접 수정합니다.
- df.drop(21, axis='index', inplace=True)
- df.drop(21, axis='index', inplace=True)
- ID 20의 행 추가
- .loc[20] = [70, 200]
→ 새로운 ID 20을 추가하고, Height = 70, Weight = 200 값을 설정합니다.
- .loc[20] = [70, 200]
- df.loc[20] = [70, 200]
최종 DataFrame 예시
ID Height (Inch) Weight (Pound)
0 | 73.8470 | 241.8936 |
1 | 70.0000 | 200.0000 |
2 | 74.1101 | 212.7409 |
... | ... | ... |
19 | 61.9442 | 113.6491 |
20 | 70.0000 | 200.0000 |
✔ ID 1의 Weight 값이 200으로 수정됨
✔ ID 21이 삭제됨
✔ ID 20이 추가됨
index_col=0 & inplace=True 쉽게 정리!
1. index_col=0
- CSV 파일에서 첫 번째 열(column)을 인덱스로 사용하게 만듦.
- 데이터를 불러올 때 ID나 특정 열을 **행 인덱스(index)**로 설정할 수 있음.
예제
df = pd.read_csv("data.csv", index_col=0)
✔ 첫 번째 열(ID)을 행 인덱스로 사용!
→ df.loc[1] 하면 ID가 1인 행을 가져옴.
2. inplace=True
- 원본 데이터(df)를 바로 수정함.
- 기본적으로 drop()이나 replace() 같은 함수는 새로운 DataFrame을 반환하지만,
inplace=True를 사용하면 원본 데이터 자체를 변경함.
예제
df.drop(21, axis='index', inplace=True)
✔ ID 21인 행을 삭제하고, 원본 DataFrame이 바로 변경됨.
🚨 inplace=True가 없으면 df = df.drop(21)처럼 새로운 변수에 저장해야 함!
간단 비교
옵션 설명 사용 예제
index_col=0 | CSV의 첫 번째 열을 인덱스로 설정 | pd.read_csv("data.csv", index_col=0) |
inplace=True | 원본 DataFrame을 바로 수정 | df.drop(21, inplace=True) |
✔ index_col=0 → CSV 불러올 때 ID 같은 특정 열을 인덱스로 사용
✔ inplace=True → DataFrame을 즉시 수정하여 변경 사항을 유지
728x90