在 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
作为字符串,而是在 clienta
或 problema
出现在任何记录中。
与其将 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
有一个包含 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
作为字符串,而是在 clienta
或 problema
出现在任何记录中。
与其将 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