자주쓰는 명령어로 배우는 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의 데이터를 조작하는 방법에 대해 알아보겠습니다. 궁금한 점이 있으시면 코멘트로 남겨주시면 감사하겠습니다.
'개발 > 파이썬' 카테고리의 다른 글
자주쓰는 명령어로 배우는 Pandas #4 : 데이터 능숙하게 다루기 (0) | 2020.11.08 |
---|---|
자주쓰는 명령어로 배우는 Pandas #3 : 데이터 조작하기 (0) | 2020.10.31 |
자주쓰는 명령어로 배우는 Pandas #1 : Pandas와 데이터 살펴보기 (0) | 2020.10.24 |
Django에서 Replica DB가 있을 때의 테스트 코드 문제 해결하기 (0) | 2020.08.09 |
Django ELB ALLOWED HOSTS 에러 수정 (0) | 2020.06.20 |