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])

📝 정리

  1. .loc[]
    • 행, 열 이름(Label) 기반 선택
    • 슬라이싱 시 마지막 값도 포함됨
  2. .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

📝 코드 설명

  1. ID 1의 무게를 200으로 변경
    • .loc[1, 'Weight (Pound)']를 사용해 ID 1의 'Weight (Pound)' 값만 200으로 변경합니다.
  2. df.loc[1, 'Weight (Pound)'] = 200
  3. ID 21의 행 삭제
    • df.drop(21, axis='index', inplace=True)
      → ID가 21인 행을 삭제합니다.
    • axis='index'를 지정해 행(row) 기준으로 삭제하도록 설정합니다.
    • inplace=True를 사용하여 DataFrame을 직접 수정합니다.
  4. df.drop(21, axis='index', inplace=True)
  5. ID 20의 행 추가
    • .loc[20] = [70, 200]
      새로운 ID 20을 추가하고, Height = 70, Weight = 200 값을 설정합니다.
  6. 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=TrueDataFrame을 즉시 수정하여 변경 사항을 유지

728x90