Pandas:创建具有关键字列表的新 Dataframe

6qftjkof  于 2023-01-19  发布在  其他
关注(0)|答案(2)|浏览(194)

我有一个新闻标题的数据框,如下所示:

df = pd.DataFrame({'texto': ['El Hubble registró imágenes de una "mariposa interestelar"',
                             'Con su Audi atropelló y mató a una pareja: lo juzgan y podrían darle 25 años',
                             'Clarín cumplió 70 años y lo celebró con su personal',
                             'A diez años de Katrina, Obama visitó Nueva Orleans y celebró la recuperación',
                             'La oposición volvió a juntarse y pidió la boleta única electrónica en octubre',
                             'Hallan a casi 50 “sin papeles” muertos en un camión en Austria'],
                   'id': [1,2,3,4,5,6]})

df['texto'] = df['texto'].str.lower()

searchwords = ['hubble','audi','obama','clarín','austria']

我试着搜索一些关键字中的每一个是否出现在上面的数据框中,然后创建一个新的。我试过'startswith',但是只包含关键字在前面的句子。

Code:
df = df[df['texto'].str.startswith(tuple(searchwords))]

Output:

clarín cumplió 70 años y lo celebró con su per...   3

你知道一种方法来创建一个Pandas线或一个函数来创建一个过滤器像这样?
谢谢!

bxgwgixi

bxgwgixi1#

这样做的另一个选项(没有矢量化,因此效率较低)是:

def serach_term(texto, terms):
    if any([t in texto for t in terms]):
        return True
    return False

以及

df['exists'] = df.apply(lambda x: serach_term(x['texto'],searchwords), axis=1)

预期结果:[![在此输入图像说明][1]][1]
你可以控制函数,并进行相应的调整,但你一行一行地移动,速度相对较慢。

texto                                              id   exists
0   el hubble registró imágenes de una "mariposa i...   1   True
1   con su audi atropelló y mató a una pareja: lo ...   2   True
2   clarín cumplió 70 años y lo celebró con su per...   3   True
3   a diez años de katrina, obama visitó nueva orl...   4   True
4   la oposición volvió a juntarse y pidió la bole...   5   False
5   hallan a casi 50 “sin papeles” muertos en un c...   6   True
yptwkmov

yptwkmov2#

用途

df2 = df[df['texto'].str.contains('|'.join(searchwords))]

说明:
'|'.join(searchwords)生成一个字符串,其中搜索词由|(OR运算符)符号。df['texto'].str以字符串形式提供列的每个元素,然后检查它是否包含任何搜索词(因此使用OR运算符)。这会产生一系列True / False值。然后使用布尔序列从DataFrame df中选择满足True条件的行,这些行形成新的DataFrame df 2。

相关问题