如何在Pandas中处理分类数据并生成数值映射转换为Numpy数组
Pandas分类数据转Numpy数组用于模型训练完整示例
以下是针对需求的完整实现步骤,从特征压缩到生成可直接用于模型训练的Numpy数组:
1. 横向压缩分类特征(生成列名-值格式)
先将每个分类特征值与列名拼接,明确区分不同列的相同取值,同时统一处理缺失值(标记为列名-NaN):
import pandas as pd import numpy as np # 创建示例DataFrame df2 = pd.DataFrame({"c1": ['a','b',None], "c2": ['d','e','f']}) # 生成列名-值格式的特征,缺失值统一标记 compressed_features = df2.apply( lambda row: [f"{col}-{val}" if pd.notna(val) else f"{col}-NaN" for col, val in row.items()], axis=1 ) # 将列表格式转换为结构化DataFrame compressed_df = pd.DataFrame(compressed_features.tolist(), columns=df2.columns)
2. 生成包含唯一值及缺失值的词汇表
收集所有压缩后的唯一特征值(含缺失值对应项),构建编码映射字典:
# 提取所有唯一的压缩特征值 vocab = np.unique(compressed_df.values.flatten()) # 创建词汇到数字的映射(索引从0开始) vocab_to_idx = {val: idx for idx, val in enumerate(vocab)}
3. 数值编码
用构建好的词汇映射对压缩后的特征进行数值编码:
# 替换为对应的数字编码 encoded_df = compressed_df.replace(vocab_to_idx)
4. 转换为Numpy数组
将编码后的DataFrame转为Numpy数组,直接支持后续转为张量用于模型训练:
# 转为Numpy数组 encoded_np = encoded_df.to_numpy()
验证输出示例
运行以下代码查看各步骤结果:
print("压缩后的特征DataFrame:") print(compressed_df) print("\n词汇表:") print(vocab) print("\n编码后的DataFrame:") print(encoded_df) print("\n最终Numpy数组:") print(encoded_np)
输出结果:
压缩后的特征DataFrame: c1 c2 0 c1-a c2-d 1 c1-b c2-e 2 c1-NaN c2-f 词汇表: ['c1-NaN' 'c1-a' 'c1-b' 'c2-d' 'c2-e' 'c2-f'] 编码后的DataFrame: c1 c2 0 1 3 1 2 4 2 0 5 最终Numpy数组: [[1 3] [2 4] [0 5]]
内容的提问来源于stack exchange,提问作者noobie2023
相关产品推荐
相关产品推荐

