在python中使用str.contains(),它与字符串完全匹配,但仍然无法获得输出

2024-09-27 22:19:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用str.contains()从数据帧中搜索电影名称,但没有得到任何输出,但当我有部分字符串时,它会正确地给出输出。我想要的是如何使这个代码段在部分和完整字符串匹配中都能正确工作

部分字符串上使用contains,如果我在minList中仅使用“(第1卷)”,我将获得正确的输出或如下所示的输出

minList = ['Star Wars: Clone Wars']
for k in minList:
    print(df[df.name.str.contains(k,case=False,na=False)]["name"])

3208 Star Wars: Clone Wars (Volume 1) Name: name, dtype: object

完整字符串上使用contains

minList = ['Star Wars: Clone Wars (Volume 1)']
for k in minList:
    print(df[df.name.str.contains(k,case=False,na=False)]["name"])

而且没有输出

Series([], Name: name, dtype: object)

也尝试过使用查询()

minList = ['Star Wars: Clone Wars (Volume 1)']
for k in minList:
    print(df.query('name.str.contains("' + k + '")',engine='python')['name'])

但没有产出

Series([], Name: name, dtype: object)


Tags: 字符串nameinfalsedfforclonestar
1条回答
网友
1楼 · 发布于 2024-09-27 22:19:04

将参数regex=False添加到str.contains()调用

str.contains()默认情况下将第一个参数作为正则表达式(regex)。因此,括号被视为正则表达式符号,与括号不匹配

演示

data = {'name': ['Star Wars: Clone Wars (Volume 1)', 'Other strings']}
df = pd.DataFrame(data)
print(df)

Output:
                               name
0  Star Wars: Clone Wars (Volume 1)
1                     Other strings

minList = ['Star Wars: Clone Wars (Volume 1)']
for k in minList:
    print(df[df.name.str.contains(k,case=False,na=False, regex=False)]["name"])

Output:   # String extracted successully.

0    Star Wars: Clone Wars (Volume 1)
Name: name, dtype: object

如果要将字符串与regex=True匹配,则需要将作为第一个参数传递的字符串修改为:

minList = [r'Star Wars: Clone Wars \(Volume 1\)']

演示

minList = [r'Star Wars: Clone Wars \(Volume 1\)']
for k in minList:
    print(df[df.name.str.contains(k,case=False,na=False)]["name"])

Output:       # String matched successfully

0    Star Wars: Clone Wars (Volume 1)
Name: name, dtype: object

在这里,我们使用\(代替(,使用\)代替)。我们还使用原始字符串r'....'来引用整个字符串,这样就不需要对被视为正则表达式的字符串使用双斜杠

相关问题 更多 >

    热门问题