在一些机器学习算法中,经常要对数据进行编码转换,转换后需要查询标签和编码的对应关系,可以使用以下代码处理。
但是注意下面代码使用的是 astype(‘category’),它和pd.Category(…)是不一样的,具体区别请参考文章python-.astype(‘categorical’)和`pd.Category(…)`之间的熊猫区别 -Python-编程之家
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'}}
参考文章:
Python:字符型变量astype('category').cat.codes 字典映射关系存储以及应用-CSDN博客