在一些機器學習算法中,經常要對數據進行編碼轉換,轉換後需要查詢標籤和編碼的對應關係,可以使用以下代碼處理。
但是注意下面代碼使用的是 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'}}
參考文章: