我对ColumnTransformer
进行了一个非常简单的实验,目的是转换列数组,[“a”]在本例中:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.compose import ColumnTransformer
dataset = pd.DataFrame({"a":["word gone wild","gone with wind"],"c":[1,2]})
tfidf = TfidfVectorizer(min_df=0)
clmn = ColumnTransformer([("tfidf", tfidf, ["a"])],remainder="passthrough")
clmn.fit_transform(dataset)
这给了我:
^{pr2}$显然,TfidfVectorizer
可以独立完成fit_transform()
:
tfidf.fit_transform(dataset.a)
<2x5 sparse matrix of type '<class 'numpy.float64'>'
with 6 stored elements in Compressed Sparse Row format>
出现这种错误的原因是什么?如何纠正?在
这是因为您提供的是
["a"]
,而不是ColumnTransformer
中的"a"
。根据文件:现在,
TfidfVectorizer
需要一个字符串迭代器作为输入(因此是字符串的一维数组)。但是,由于您发送的是ColumnTransformer
中的列名列表(即使该列表只包含一个列),所以它将是一个二维数组,将被传递给TfidfVectorizer
。因此错误就出现了。在改为:
为了更好地理解,请尝试使用上述方法从pandas数据框中选择数据。执行以下操作时,请检查返回数据的格式(数据类型、形状):
^{pr2}$回答:关于你的更新文档,你认为是误解了。如果要在两个列上执行tfidf,则需要传递两个transformer。像这样:
我们可以创建一个定制的tfidf转换器,它可以接受一个列数组,然后在应用
.fit()
或.transform()
之前连接它们。在试试这个!在
注:可能需要为每个列创建一个tfidf向量器,然后创建一个字典,其中key作为列名,value作为fitted vectorizer。此字典可在转换相应列时使用
相关问题 更多 >
编程相关推荐