【问题标题】:sklearn tfidfvectorizer: how to intersect a tfidf frame on a column?sklearn tfidfvectorizer:如何在列上与 tfidf 框架相交?
【发布时间】:2018-05-24 04:43:30
【问题描述】:

在 R 中,我可以提取包含特定术语的行(文档),例如“toyota”,方法是将文档术语矩阵 (dtm) 与所需的列名相交,如下所示:

dtm <- DocumentTermMatrix(mycorpus, control = list(tokenize = TrigramTokenizer))
x.df<-as.matrix(dtm[1:ncorpus, intersect(colnames(dtm), "toyota"),drop=FALSE])

问题是我在 Python sklearn 包中找不到等效的方法。所以我绕道而行:

  1. 首先我获取 tfidf 框架中相关列(“toyota”)不为空的行的索引值;列名是特征名。
  2. 然后我根据已识别的行索引对主要的 pandas 数据帧进行切片。
  3. 现在我有一个数据框,其中每一行都包含“toyota”。

MVP在这里:

rows_to_keep=tfidf_df[tfidf_df.toyota.notnull()].index data=my_df.loc[rows_to_keep,:] print(data.shape)

这行得通。问题是如何将迭代器传递给该语句?

car_make=['toyota','ford','nissan','gmotor','honda','suzuki']

然后for zentity in car_make:

rows_to_keep=tfidf_df[tfidf_df.zentity.notnull()].index

不工作。

AttributeError: 'SparseDataFrame' 对象没有属性 'zentity'

我故意选择 zentity 以避免与 tfidf 中的任何列名等价。

是否有一种干净的方法来进行交集并仅提取列不为空 (NaN) 的行?任何帮助将不胜感激。

【问题讨论】:

    标签: python-3.x scikit-learn tf-idf sklearn-pandas


    【解决方案1】:

    而不是 rows_to_keep=tfidf_df[tfidf_df.zentity.notnull()].index

    你应该使用类似的东西 rows_to_keep=tfidf_df[tfidf_df[zentity].notnull()].index

    使用像 zentity 这样的变量,即使它存储一个字符串,来属性访问 tfidf_df 的列似乎总是会失败。我现在不确定为什么(我认为这与 DataFrame 在创建它时如何处理列名以及类对象属性访问通常如何工作有关),但我会查一下。

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 1970-01-01
      • 2017-03-27
      • 2021-08-24
      • 2019-12-27
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多