python astype('category'), 編碼和標籤對應,categories 和 code 映射爲字典

在一些機器學習算法中,經常要對數據進行編碼轉換,轉換後需要查詢標籤和編碼的對應關係,可以使用以下代碼處理。

但是注意下面代碼使用的是 astype(‘category’)它和pd.Category(…)是不一樣的,具體區別請參考文章https://www.jb51.cc/python/533189.html

import pandas as pd

# 創建數據集
df = pd.DataFrame.from_dict(
            {
            'col1': ['A', 'B', 'C', 'B', 'A', 'D'],
            'col2': ['aa', 'bb', 'bb', 'aa', 'dd', 'dd'],
            'col3': ['yes', 'yes','no','no','yes','yes']
            }
            ,orient='columns')
# df 
#   col1 col2 col3
# 0    A   aa  yes
# 1    B   bb  yes
# 2    C   bb   no
# 3    B   aa   no
# 4    A   dd  yes
# 5    D   dd  yes

# 轉換爲分類數據
df = df.astype('category') # 可以指定特定的列轉爲分類數據 df['col1'] = df['col1'].astype('category')

# 將標籤數據轉換爲編碼
df_code = pd.DataFrame({col: df[col].cat.codes for col in df}, index=df.index)

# df_code 
#    col1  col2  col3
# 0     0     0     1
# 1     1     1     1
# 2     2     1     0
# 3     1     0     0
# 4     0     2     1
# 5     3     2     1

# 將編碼和標籤一一對應,轉爲字典,方便查詢
df_code_dict = {col: {code: category for code, category in enumerate(df[col].cat.categories)} for col in df}
# df_code_dict 
# {'col1': {0: 'A', 1: 'B', 2: 'C', 3: 'D'},
#  'col2': {0: 'aa', 1: 'bb', 2: 'dd'},
#  'col3': {0: 'no', 1: 'yes'}}

參考文章:

https://blog.csdn.net/qq_43288098/article/details/105429609

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章