.find()和python中的'in'运算符之间的区别

时间:2019-11-18 00:23:23

标签: python pandas find in-operator

我正在使用名为 filteredDS

的熊猫处理Dataframe

目标:

  

搜索所有数据,其 question 列中包含'King'单词。

当我通过 in 运算符添加列 king_quest 时,如下所示:

filteredDS['king_quest'] = filteredDS.question.apply(lambda x: x if ' King ' in x else None).reset_index(drop = True)
filtered_king_df = filteredDS[~filteredDS.king_quest.isnull()].reset_index()
print(filtered_king_df)

我得到大约2000行的数据框, 当我通过.find()函数将其添加时,如下所示:

filteredDS['king_quest'] = filteredDS.question.apply(lambda x: x if x.find('king') else None).reset_index(drop = True)
filtered_king_df = filteredDS[~filteredDS.king_quest.isnull()].reset_index()
print(filtered_king_df)

我得到大约3000行的数据框。

注意:在两种情况下,问题列中的每一行都有'king'字。

你能告诉我为什么会这样吗?

3 个答案:

答案 0 :(得分:2)

这里可能有多个问题。

  1. 您的发现正在语句中寻找不同的值。 “ King”(一个空格,首字母大写),另一个则为“ king”。

  2. x.find('king')返回第一个匹配项的索引,否则返回-1。如果要使用此功能进行检查,则可能应该检查x.find('king') > 0,但这不如'king' in x

  3. 直观

答案 1 :(得分:1)

运营商

“ in”运算符用于检查序列中是否存在某个值。如果找到指定顺序的变量,则评估为true,否则为false。

import boto3
s3_client = boto3.client('s3')
try:
    response = s3_client.generate_presigned_url(ClientMethod=client_method_name,
                                                Params=method_parameters,
                                                ExpiresIn=expiration,
                                                HttpMethod=http_method)
except ClientError as e:
    logging.error(e)
    return None
# The response contains the presigned URL
return response

find()方法 如果在给定的字符串中找到子字符串,则find()方法返回该子字符串的最低索引。如果找不到,则返回-1。

# Python program to illustrate 
# Finding common member in list  
# using 'in' operator 
list1=[1,2,3,4,5] 
list2=[6,7,8,9] 
for item in list1: 
    if item in list2: 
        print("found")       
else: 
    print("not found") 

答案 2 :(得分:0)

以下是对find()方法的更全面的解释:

  • 它会寻找一个子串并返回该子串首次出现的索引
  • 对于包含不存在的子字符串的参数不会产生错误-如果不存在子字符串,则返回-1
  • 它仅适用于字符串

它有两个参数,即find(string,position),其中string是您的字符串,而position指定了将开始搜索的索引。如果您未指定位置,则find()将从字符串的开头开始。

它还有一个三参数变量,前两个参数类似于二参数变量,第三个参数是在搜索过程中不考虑第一个索引的位置。您可以想到它具有以下签名:find(string,starting_position,Ending_position),并且不包含Ending_position

我以前没有使用filteredDS,也不熟悉它,希望下面的示例可以帮助您想到一种将find()方法应用于您的案例的方法。该代码打印字符串“ text”中所有出现的单词“ it”的索引。

text =“ Lorem Ipsum只是印刷和排版行业的伪文本。自1500年代以来,Lorem Ipsum一直是该行业的标准伪文本。它不仅生存了五个世纪,而且还进入了电子排版的飞跃。基本上没有变化。它在1960年代流行,发布了包含Lorem Ipsum段落的Letraset纸张,最近又使用了桌面出版软件。它得到了广泛的应用。”

index = text.find("it")
while index != -1:
    print(index)
    index = text.find("it", index+1)