Это потому, что вы предоставляете ["a"]
вместо "a"
в ColumnTransformer
.Согласно документации:
Следует использовать скалярную строку или int, если преобразователь ожидает, что X будет 1-мерным массивом (вектором), в противном случае 2d-массив будет передан в преобразователь.
Теперь для TfidfVectorizer
требуется один итератор строк для ввода (таким образом, 1-й массив строк).Но поскольку вы отправляете список имен столбцов в ColumnTransformer
(даже если этот список содержит только один столбец), это будет 2-й массив, который будет передан в TfidfVectorizer
.И, следовательно, ошибка.
Измените это на:
clmn = ColumnTransformer([("tfidf", tfidf, "a")],
remainder="passthrough")
Для большего понимания попробуйте использовать перечисленные выше вещи для выбора данных в панде DataFrame.Проверьте формат (dtype, shape) возвращаемых данных, когда вы делаете:
dataset['a']
vs
dataset[['a']]
Обновление : @SergeyBushmanov, Что касается вашего комментария к другому ответу, я думаю, что вы неправильно интерпретируетедокументация.Если вы хотите выполнить tfidf для двух столбцов, вам нужно передать два преобразователя.Примерно так:
tfidf_1 = TfidfVectorizer(min_df=0)
tfidf_2 = TfidfVectorizer(min_df=0)
clmn = ColumnTransformer([("tfidf_1", tfidf_1, "a"),
("tfidf_2", tfidf_2, "b")
],
remainder="passthrough")