코딩 공부/Pandas
Pandas와 친해지기(10분 Pandas) (2024-02-04)
kyeob
2024. 2. 4. 13:03
Categoricals (2024-02-04)¶
In [ ]:
df = pd.DataFrame(
{"id": [1,2,3,4,5,6], "raw_grade": ["a", "b", "b", "a", "a", "e"]}
)
df
id | raw_grade | |
---|---|---|
0 | 1 | a |
1 | 2 | b |
2 | 3 | b |
3 | 4 | a |
4 | 5 | a |
5 | 6 | e |
In [ ]:
df["grade"] = df["raw_grade"].astype("category") # 타입을 category로 변경하여 새로운 컬럼으로써 추가
df["grade"]
0 a 1 b 2 b 3 a 4 a 5 e Name: grade, dtype: category Categories (3, object): ['a', 'b', 'e']
In [ ]:
new_categorics = ["very good", "good", "very bad"] # 변경해줄 새로운 카테고리들
df["grade"] = df["grade"].cat.rename_categories(new_categorics) # 기존 카테고리를 새로운 카테고리로 변경
In [ ]:
df
id | raw_grade | grade | |
---|---|---|---|
0 | 1 | a | very good |
1 | 2 | b | good |
2 | 3 | b | good |
3 | 4 | a | very good |
4 | 5 | a | very good |
5 | 6 | e | very bad |
In [ ]:
df["grade"] = df["grade"].cat.set_categories(
["very bad", "bad", "medium", "good", "very good"]
)
df["grade"]
0 very good 1 good 2 good 3 very good 4 very good 5 very bad Name: grade, dtype: category Categories (5, object): ['very bad', 'bad', 'medium', 'good', 'very good']
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.cat.html#pandas.Series.cat
.cat.rename_categories(new_categorics)는 기존 카테고리를 새로운 카테고리로 변경하는 것이고
.cat.set_categories(new_categorics)는 기존 카테고리를 새로운 카테고리로 변경하면서 추가로 없던 카테고리도 추가해줄 수 있다(카테고리 갯수를 늘릴 수 있다)
In [ ]:
df.sort_values(by="grade") # 대신 정렬의 기준은 어휘적 순서가 아닌 범주에서 매겨진 값의 순서대로 순서가 매겨짐
id | raw_grade | grade | |
---|---|---|---|
5 | 6 | e | very bad |
1 | 2 | b | good |
2 | 3 | b | good |
0 | 1 | a | very good |
3 | 4 | a | very good |
4 | 5 | a | very good |
In [ ]:
display(df.groupby("grade", observed=False).size())
# size로 크기를 구할 수 있기 때문에 이 방식을 통해 각 범주에 해당되는 값의 빈도수도 확인할 수 있다
# observed=False하면 카테고리에 대해 0인 것도 표시가 된다
grade very bad 1 bad 0 medium 0 good 2 very good 3 dtype: int64