如何查看Python pandas列文本因式分解对应的数值映射关系
pandas因式分解映射关系输出方案
实现逻辑
pd.factorize()返回值为二元元组:第一个元素是编码后的整数数组,第二个元素是按编码顺序排列的原始唯一文本值。现有逻辑里给编码值统一加了1,因此原始唯一值从1开始计数的序号,刚好和DataFrame里存储的编码一一对应,在循环处理列时提取这部分内容打印即可。
场景参考
- 因式分解前的原始文本数据:

- 原有基础因式分解代码:
def factorize_fun(df): obj_cols = df.loc[:, df.dtypes == object].columns for col in obj_cols: df[col] = pd.factorize(df[col])[0] +1 return df df=factorize_fun(df)
- 因式分解后的数据效果:

可直接运行的完整代码
版本1:直接按要求格式打印映射
处理每列时自动打印列名、以及编码和原始文本的对应关系,和期望的输出格式完全一致:
import pandas as pd def factorize_fun(df): obj_cols = df.loc[:, df.dtypes == object].columns for col in obj_cols: codes, uniques = pd.factorize(df[col]) df[col] = codes + 1 # 按指定格式输出映射 print(col) for code_num, text_val in enumerate(uniques, start=1): print(f"{code_num} {text_val}") # 列之间加空行分隔,提升可读性 print() return df df = factorize_fun(df)
版本2:打印同时保存映射字典供后续调用
如果后续需要反向查询编码对应的文本值,可以把映射关系存为字典返回:
import pandas as pd def factorize_fun(df): obj_cols = df.loc[:, df.dtypes == object].columns factorize_mapping = {} for col in obj_cols: codes, uniques = pd.factorize(df[col]) df[col] = codes + 1 # 构建当前列的 编码:原始文本 映射 col_map = {idx: val for idx, val in enumerate(uniques, start=1)} factorize_mapping[col] = col_map # 按指定格式打印 print(col) for code_num, text_val in col_map.items(): print(f"{code_num} {text_val}") print() return df, factorize_mapping # 调用时同时拿到处理后的数据和全量映射 df, code_map = factorize_fun(df)
输出效果示例
执行代码后控制台会逐列输出对应关系,格式如下:
kindly specify your gender 1 Male 2 Female
内容的提问来源于stack exchange,提问作者Hammad Shahzad
相关产品推荐
相关产品推荐

