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

含数字代码列表的特征预处理报错求助:缺失值填充与频率编码

字符串数字代码列表的预处理与缺失值填充问题

需求

预处理以字符串形式存储的数字代码列表特征,生成各数字的频率数组,同时完成缺失值填充。

原始代码

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer
s_data = pd.Series(['123 342 789', '12 34 56', np.nan, '1 2 3 123'])
s_data = str_data.str.split(" ")  # 存在变量名错误:str_data未定义,应为s_data
pipeline = Pipeline([
    ('imputer', SimpleImputer(strategy='most_frequent'))  # 缺少逗号分隔Pipeline步骤
    ('mlb', MultiLabelBinarizer())
])
encoded_data = pipeline.fit_transform(s_data)
encoded_df = pd.DataFrame(encoded_data, columns=mlb.classes_)

遇到的问题

  • SimpleImputer无法直接处理列表类型的输入
  • 转为numpy数组后,MultiLabelBinarizer报错“期望2个输入却传入3个”

解决方案

问题核心在于SimpleImputer不支持列表类型的缺失值填充,且原始代码存在语法错误。以下是修正后的实现:

import pandas as pd
import numpy as np
from sklearn.preprocessing import MultiLabelBinarizer

# 1. 初始化原始数据
s_data = pd.Series(['123 342 789', '12 34 56', np.nan, '1 2 3 123'])

# 2. 处理缺失值:提取非缺失数据并分割,统计最频繁的列表
non_null_data = s_data.dropna().str.split(" ")
# 将列表转为元组(可哈希)才能统计频率
freq_count = non_null_data.apply(tuple).value_counts()
# 获取出现次数最多的列表(若次数相同,取第一个)
most_frequent_list = freq_count.index[0]

# 3. 填充缺失值:将NaN替换为最频繁的列表
filled_data = s_data.apply(lambda x: most_frequent_list if pd.isna(x) else x.split(" "))

# 4. 用MultiLabelBinarizer生成频率数组
mlb = MultiLabelBinarizer()
encoded_array = mlb.fit_transform(filled_data)

# 5. 转为DataFrame
encoded_df = pd.DataFrame(encoded_array, columns=mlb.classes_)
print(encoded_df)

运行结果

1  12  123  2  3  34  342  56  789
0  0   0    1  0  0   0    1   0    1
1  0   1    0  0  0   1    0   1    0
2  1   0    1  1  1   0    0   0    0
3  1   0    1  1  1   0    0   0    0

问题原因说明

  1. 基础语法错误:原始代码中str_data未定义,且Pipeline步骤间缺少逗号,导致直接报错。
  2. SimpleImputer局限性:该工具默认处理数值型二维数组,无法识别列表类型元素,因此不能直接填充列表形式的缺失值。
  3. MultiLabelBinarizer输入要求:它需要接收可迭代的列表/序列集合,若数据格式未正确处理(如维度错误),会触发输入参数数量不匹配的报错。

内容的提问来源于stack exchange,提问作者AKHIL GOPIKUMAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:13:24