繁体   English   中英

在 python 中使用 str.contains(),当它完美匹配字符串但仍然没有得到 output

[英]using str.contains() in python, when it matches string perfectly and still not getting output

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

部分字符串上使用包含,如果我在 minList 中只使用“(第 1 卷)”,我会得到正确的 output 或下面显示的那个

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

3208星球大战:克隆人战争(第一卷)名称:名称,dtype:object

完整字符串上使用包含

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

并且没有 output

系列([],名称:名称,dtype:对象)

也尝试使用查询()

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

但没有 output

系列([],名称:名称,dtype:对象)

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

str.contains()默认将第一个参数作为正则表达式(正则表达式)。 所以括号被视为正则表达式符号并且不匹配括号字面意思。

演示

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'....'来引用整个字符串,这样我们就不需要对被视为正则表达式的字符串使用双斜杠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM