Sklearn FeatureHasher处理DataFrame单列报错问题求助
解决FeatureHasher处理单列字符串时的ValueError问题
错误原因
当input_type='string'时,FeatureHasher要求输入是可迭代的可迭代对象——也就是说每个样本得是一个包含字符串的迭代器(比如单元素列表)。而你直接传入的X_train["Item_Identifier"]是Pandas Series,每个元素是单个字符串,不符合输入要求,所以触发了错误。
修复方案
只需要把每个字符串包装成单元素列表,让输入符合FeatureHasher的要求即可,有两种简单写法:
写法1:用Pandas的apply处理Series
from sklearn.feature_extraction import FeatureHasher import pandas as pd hash_vector_size = 50 fh = FeatureHasher(n_features=hash_vector_size, input_type='string') # 将每个字符串转为单元素列表 processed_input = X_train["Item_Identifier"].apply(lambda x: [x]) hashed_features = fh.transform(processed_input).toarray() hashed_df = pd.DataFrame(hashed_features, columns=['H'+str(i) for i in range(hash_vector_size)])
写法2:生成列表推导式
from sklearn.feature_extraction import FeatureHasher import pandas as pd hash_vector_size = 50 fh = FeatureHasher(n_features=hash_vector_size, input_type='string') # 直接生成包含单元素列表的迭代器 processed_input = [[item] for item in X_train["Item_Identifier"]] hashed_features = fh.transform(processed_input).toarray() hashed_df = pd.DataFrame(hashed_features, columns=['H'+str(i) for i in range(hash_vector_size)])
这样处理后,就能得到你预期的50列哈希特征DataFrame了。
内容的提问来源于stack exchange,提问作者Dayo Salam
相关产品推荐
相关产品推荐

