본문 바로가기

개발/파이썬

자주쓰는 명령어로 배우는 Pandas #2 : Index와 Column 조작하기

반응형

자주쓰는 명령어로 배우는 Pandas 1편에 이어 2편입니다. 이번에는 Index와 Columns를 직접적으로 조작해보도록 하겠습니다. 1편에서 작성했던 코드 결과들은 계속 유지되니 직접 실습을 따라 하고 싶으신 분들은 1편을 참고해주세요.

지금까지의 데이터프레임은 이렇게 생겼습니다.

df.head()

실행결과

Index 조작하기

Index 초기화

기존에 설정된 인덱스를 초기화하려면 reset_index 메소드를 사용하면 됩니다.

df = df.reset_index()
df.head()

실행결과

Index 설정하기

특정 컬럼을 Index로 설정하고 싶으시다면, 해당 컬럼을 set_index 메소드의 인자로 넣으시면 됩니다.

df = df.set_index("username")
df.head()

실행결과

인덱스를 선택하거나 확장할 때 사용하는 reindex

reset_index랑 간혹 헷갈리기도 하는 reindex메소드 입니다. 해당 메소드는 기존 인덱스에서 원하는 인덱스를 추출하거나, 기존에 존재하지 않던 index도 확장한 Series 및 DataFrame을 뽑을 수 있게 해줍니다.

# 임시 df 생성 (위에서부터 10개의 데이터만 선택)
df_temp = df.head(10)
df_temp

아래의 결과에서 보시다시피, "SJQUANT", "STOCK_KING", "tina93" 인덱스는 기존 DataFrame에는 존재하지 않았지만 새롭게 추가된 데이터 프레임이 반환되었습니다. 다른 컬럼의 값들은 모두 NaN 값을 가지고 있습니다. '이걸 어디에 쓰나'라고 생각하실 수도 있지만, 실제 데이터를 다루다 보면 종종 사용하게 됩니다.

실행결과

df_temp.reindex(["richard47", "whitelori", "holly23", "SJQUANT", "STOCK_KING", "tina93"])

실행결과

이 외에도 DatetimeIndex, MultiIndex등과 관련된 내용이 많으니, 보다 상세히 알고 싶으신 분들은 Pandas 공시문서 Index API를 참고해주시면 됩니다.

Columns 조작하기

이번에는 Columns를 한 번 조작해보겠습니다.

Column 이름 변경하기

df.columns를 입력하면 데이터프레임의 columns를 확인할 수 있습니다.

df.columns

실행결과

df.columns를 직접 설정해주어 컬럼명을 바꿀 수 있습니다. 같은 원리로 인덱스명 역시 직접 설정하여 바꿀 수 있습니다.

df.columns = ["Name", "Gender", "Address", "Mail", "Birth"]
df.index.name = "Username"
df.head()

실행결과

하지만, 이렇게 하면 모든 컬럼명을 다 입력해줘야 한다는 단점이 있습니다. 아래와 같은 방식으로도 컬럼명을 바꿀 수 있습니다. 이 방식을 더 권장드립니다.

df = df.rename(columns={"Birth": "Birthdate"})
df.head()

실행결과

새로운 Column 추가하기

새로운 컴럼을 추가하기 위해서는 df[<추가할 컬럼명>] = <추가할 Series> 문법을 사용해주시면 됩니다. 물론, 해당 문법으로 기존 컬럼을 다른 컬럼으로 바꿀 수도 있습니다.

# Birthdate를 pandas에서 인식할 수 있는 Datetime 타입으로 바꿔주는 과정
df["Birthdate"] = pd.to_datetime(df["Birthdate"])

# Age 컬럼 추가
df['Age'] = pd.Timestamp.now().year - df["Birthdate"].dt.year
df.head()

실행결과

Column 제거하기

Column을 제거하기 위해서는 df.drop 메소드를 사용해주시면 됩니다, 단, 키워드 파라미터로 axis=1을 넣어주셔야 합니다.

df = df.drop("Birthdate", axis=1) # axis에는 1대신 "columns"가 들어가도 됨.
df.head()

실행결과

DataFrame 합치기

이번에는 서로 다른 두 개의 데이터프레임을 합쳐서(Merge) 여러개의 새로운 컬럼을 가진 데이터프레임을 만들어보겠습니다.

우선 df2를 만들어주겠습니다.

import random
data2 = {
    "Salary": [random.randrange(10, 10000) for _ in range(150)],
    "WeeklyDrink": [random.randrange(0, 11) for _ in range(150)],
    "WeeklyExercise": [random.randrange(0, 6) for _ in range(150)]
}
df2 = pd.DataFrame(data2,index = df.sample(150).index)
df2.head()

실행결과

pd.merge 메소드를 이용하면 두 개의 데이터 프레임을 합칠 수 있습니다. 아래는 간단한 사용법을 소개해드립니다. merge에 대한 자세한 사용법을 알고 싶으신 분들은 Pandas 공식문서의 Merge, join, concatenate and compare를 읽어보시길 바랍니다. 강력히 추천하는 글입니다.

df = pd.merge(df, df2, on="Username", how="left")
df.head(20)

실행결과

이상으로 자주쓰는 명령어로 배우는 Pandas 2편을 마치겠습니다. 3편에서는 DataFrame의 데이터를 조작하는 방법에 대해 알아보겠습니다. 궁금한 점이 있으시면 코멘트로 남겨주시면 감사하겠습니다.

반응형