【问题标题】:How to use 'return' statement?如何使用'return'语句?
【发布时间】:2019-09-22 19:04:21
【问题描述】:

我将尝试在给定字典中的一堆单词的情况下对文本进行分类,该字典包含具有相关不同单词的词干组。另一方面是我有一个数据框,其中每个代表和文章。 主要目标是,如果组中至少有 50% 的单词被找到,则分配 1 否则分配 0

stemmed_search = {Group_1:['solicit', 'requier', 'día'], Group_2:['infraestruc', 'construccion', 'gas', 'nigrogen']}
test = ['solicit', 'requier', 'día', 'infraestruc', 'construccion', 'gas', 'nigrogen']
word_list = [['solicit', 'requier', 'día'], ['infraestruc', 'construccion', 'gas', 'nigrogen']]
def compar(test):
    for item in stemmed_search.values():
        filt = []
        for i in item:
            if i in test:
                filt.append(True)
            else:
                filt.append(False)
        #print(filt)
        umbral = len(filt) * 0.5
        Trues = filt.count(True)

    return[1 if Trues > umbral else 0 for i in range(0, len(words_list))]

text['Class'] = text.Stem.apply(compar)

我尝试使用此语句,但它不起作用:

return[1 if Trues > umbral else 0 for i in range(0,len(filt))]

然后我有这个:[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]。 后来假设问题出在列表的range 中,所以我进行了更改,并且得到了与预期相似的输出:

return[1 if Trues > umbral else 0 for i in range(0, len(words_list))]

但是当我执行该行时,输出与我想要的非常相似:[1, 1],[1, 1],[0, 0],[0, 0]。 我认为问题就在这里,因为当我只执行没有apply 的比较函数时,它可以工作。

我希望在text['Class'] column: [0, 1],[0, 1],[0, 0],[0, 0]

中有这样的输出

【问题讨论】:

  • 你能提供一个输入和预期输出的例子吗?谢谢!
  • 两个输入...数据集的字典?还是哪一个?
  • 至少 'stemmed_search', 'test' 和 'filt',如果你能把剩下的做得更好的话
  • 这样更好吗?
  • 我认为您首先需要决定是要打印东西,还是要在 pandas 数据框中创建列,因为通过 @987654332 调用函数没有意义@,它所做的只是打印数字和“END ROW”。

标签: python pandas return apply


【解决方案1】:

如果我正确理解了您的问题,请给出以下输入:

stemmed_search = {'Group_1':['solicit', 'requier', 'día'], 'Group_2':['infraestruc', 'construccion', 'gas', 'nigrogen']}
test = ['solicit', 'requier', 'día', 'infraestruc', 'construccion', 'gas', 'nigrogen']
test2 = ['solicit', 'lol', 'lol', 'infraestruc', 'construccion', 'gas', 'nigrogen']

df = pd.DataFrame([[test,test2]], ['Stem']).T
                                                Stem
0  [solicit, requier, día, infraestruc, construcc...
1  [solicit, lol, lol, infraestruc, construccion,...

此代码适合您:

def compar2(test):
    test = set(test)
    return [1 if len(set(group) - test) < len(group) * 0.5 else 0 for _,group in stemmed_search.items()]

df['Text'] = df.Stem.apply(lambda x: compar2(x))

并给出:

                                            Stem      Text
0  [solicit, requier, día, infraestruc, construcc...  [1, 1]
1  [solicit, lol, lol, infraestruc, construccion,...  [0, 1]

编辑:其他示例:

def category_name(test):
    return [k for k,group in stemmed_search.items() if len(set(group) - set(test)) < len(group) * 0.5]

stemmed_search = {'Food': ['pizza', 'chips', 'cheese', 'tomato', 'apple'], 
                  'Animal': ['horse', 'snake', 'dog', 'cat'],
                  'School': ['book', 'pen', 'vocabolary', 'homework', 'student']
                 }
stemmed_articles = [['macheroni', 'car', 'pizza', 'free', 'dog', 'apple', 'chips'],
                    ['dog', 'hungry', 'cat', 'kill', 'snake', 'gas', 'apple'],
                    ['student', 'train', 'car', 'pen', 'homework', 'table', 'book']
                   ]

df = pd.DataFrame([stemmed_articles], ['stemmed_articles']).T
df['categories'] = df.stemmed_articles.apply(lambda x: compar2(x))
df['categories_name'] = df.stemmed_articles.apply(lambda x: category_name(x))

并给出:

                                    stemmed_articles categories  categories_name  
0   [macheroni, car, pizza, free, dog, apple, chips]  [1, 0, 0]  [Food] 
1        [dog, hungry, cat, kill, snake, gas, apple]  [0, 1, 0]  [Animal] 
2  [student, train, car, pen, homework, table, book]  [0, 0, 1]  [School]

【讨论】:

  • 问题是:我的数据框有一列有“n”行,每行代表一篇文章。另一方面,我有一本包含不同主题的字典。所以,我必须检查至少 50% 中的哪些条目匹配……如果为真,则获得 1,否则获得 '0。对于字典中的每个键。
  • 这正是这段代码所做的:) 在 topic1 和 topic2 中标记 article1,在 topic2 中标记 article2 @ChachoFuva
  • @ChachoFuva 清楚还是要我再举一个例子?
  • @ChachoFuva 我又加了一个例子,希望能澄清你的疑惑
  • @ChachoFuva group 是字典 stemmed_search 的值。例如对于键 'Animal' group['horse', 'snake', 'dog', 'cat']
猜你喜欢
  • 2020-06-23
  • 1970-01-01
  • 2013-12-22
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2017-11-17
  • 1970-01-01
相关资源
最近更新 更多