在 Pandas 中搜索 Python 中的数据框

Searching in Pandas Dataframe in Python

有一个包含 ngram 意大利语文本的数据框。看起来像这样:

    Name
0   accensione del drive ribobinatrice ho
1   actions urgente proporre al cliente
2   al cliente upgrade del drive
3   al drive con una smontata
4   causa di un problema di

我想搜索单词组合'cliente problema'

按照我的逻辑,它应该给我行号 1,2 和 4。

使用 contains() 的方法,但 returns 空系列:

Term = 'cliente problema'

x_word = df_pentagrams.Name[df_pentagrams.Name.str.contains(Term)]

如何在Pandas中解决这个问题?

谢谢!

尝试使用“|”字符在搜索字符串中加入您的单独术语。目前您的代码试图匹配整个 'cliente problema' 字符串,其中 none 行包含。

df = pd.DataFrame(data = ['accensione del drive ribobinatrice ho',
'actions urgente proporre al cliente',
'al cliente upgrade del drive',
'al drive con una smontata',
'causa di un problema di',], columns = ['Name'])

Term = 'cliente problema'

x_word = df.Name[df.Name.str.contains('|'.join(Term.split(' ')))]

您对 str.contains 行为的期望是错误的。当您在示例中使用 str.contains 时,您正在搜索一个明确的字符串 cliente problema,但根据您的期望,您并不是在寻找 clienta problema 作为字符串,而是在 clientaproblema 出现在任何记录中。

与其将 clienta problema 视为字符串,不如将该字符串拆分为一个列表,然后在过滤 DataFrame:

时使用该列表
terms = term.split(' ')
df_penagrams.Name[df_pentagrams.Name.str.contains('|'.join(terms))

问题是您正在搜索 确切的 字符串 'cliente problema' 而不是 'cliente' 或 'problema'.

这就是你想要做的:

    Term1 = 'cliente' 
    Term2 = 'problema'

    x_word = df_pentagrams.Name[df_pentagrams.Name.str.contains(Term1) 
| df_pentagrams.Name.str.contains(Term2)]

您可以使用正则表达式或列表理解来过滤单词:

df = pd.DataFrame({'Name': ['accensione del drive ribobinatrice ho',
                            'actions urgente proporre al cliente',
                            'al cliente upgrade del drive',
                            'al drive con una smontata',
                            'causa di un problema di']})

Term = 'cliente problema'

# regex
p = '|'.join(Term.split())
res = df[df['Name'].str.contains(r'\b{}\b'.format(p))]

# list comprehension
res = df[[any(i in words for i in Term.split()) \
          for words in df['Name'].str.split().values]]

print(res)

                                  Name
1  actions urgente proporre al cliente
2         al cliente upgrade del drive
4              causa di un problema di