python - 向量化 Pandas 列
问题描述
我正在处理一个带有文本描述列的 Pandas 数据框。此列需要转换为与支持向量机一起使用的内容,特别是sklearn SVC
. 所以我想获取每个描述并用数字数据替换它,为此我使用 TfidfVectorizer。
vectorizer = TfidfVectorizer()
df['description'] = vectorizer.fit_transform(df['description'])
这导致记录如下所示:
0 (0, 12)\t0.30879049244590173\n (0, 333)\t0....
返回的内容很接近,但仍无法在 SVM 中使用。我怀疑我误解了如何sklearn
处理Pandas
解决方案
两件事情:
的输出
vectorizer.fit_transform()
是一个二维数组。将二维数组存储在 DataFrame 的单列中是不好的,会导致问题。的输出
vectorizer.fit_transform()
是一个稀疏的二维数组,以节省内存。由于词汇表很大并且大多数文档将只包含整个词汇表中的一些单词,因此实际输出数组包含大量零值元素。稀疏矩阵是处理这些的一种方法。pandas
通常不适用于稀疏数组。它认为这是一个单一的对象。所以当你这样做时:df['description'] = vectorizer.fit_transform(df['description'])
将单个对象(我们的稀疏矩阵)广播到该指定列的每个位置(行)。所以这是不正确的。
如果您可以使用稀疏矩阵,那么您应该像@AI_Learning 提到的那样进行进一步处理。
如果您绝对需要将 tf-idf 值存储到 DataFrame 中以用于显示或保存,正确的方法是创建一个新的 DataFrame:
sparse_out = vectorizer.fit_transform(df['description'])
tfidf_df = pd.DataFrame(data = sparse_out.toarray(),
columns = vectorizer.get_feature_names())
tfidf_df.head()
推荐阅读
- javascript - 无法绑定到“ngForOf”,因为它不是“div”的已知属性。- App.module.ts 已经有正确的引用
- python - 如何在 Python 中使用递归从多级创建扁平列表?
- javascript - 居中父 div 滚动条,具有动态宽度
- python-3.x - 如何从 docker-py 获取容器 ID
- oauth-2.0 - OAuth - 在同一个客户端上组合设备流和客户端凭据流是否有意义?
- reactjs - 在 Ref div React Hooks + Typescript 中处理鼠标事件
- typescript - GraphQL typescript 参数类型不兼容
- javascript - Google Apps 脚本 split('\n') 不适用于 Goggle 管理目录中的数据
- regex - 非连续字符的正则表达式
- swift - SwiftUI - 在工作表中有一个不可滚动的固定继续按钮