You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:40:23