在R中,我可以提取包含特定术语的行(文档),通过将文档术语矩阵(dtm)与所需的列名相交来说“丰田”,如下所示:
dtm <- DocumentTermMatrix(mycorpus, control = list(tokenize = TrigramTokenizer))
x.df<-as.matrix(dtm[1:ncorpus, intersect(colnames(dtm), "toyota"),drop=FALSE])
问题是我在Python sklearn包中找不到等效的方法。所以我以迂回的方式解决这个问题:
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)的行?任何帮助将不胜感激。
答案 0 :(得分: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在创建列名时如何处理列名以及类对象属性访问通常如何工作有关),但我会查找它。