Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dataframe python检查字符串是否存在于另一列中,忽略大写/小写_Python_Pandas_Dataframe - Fatal编程技术网

dataframe python检查字符串是否存在于另一列中,忽略大写/小写

dataframe python检查字符串是否存在于另一列中,忽略大写/小写,python,pandas,dataframe,Python,Pandas,Dataframe,我的数据帧与我在中要求的相同 我想检查名称是否也是描述的一部分,如果是,则保留该行。如果不是,请删除该行。在这种情况下,它将在某处删除第三行JW员工 我正在使用 df[df.apply(lambda x: x['Name'] in x['Description'], axis = 1)] 在这种情况下,它还删除了BQ的行,因为在描述中BQ是小写的。在这里,是否仍要使用相同的语法,但要考虑大小写敏感度?使用.lower使其不区分大小写: df[df.apply(lambda x: x['Name

我的数据帧与我在中要求的相同

我想检查名称是否也是描述的一部分,如果是,则保留该行。如果不是,请删除该行。在这种情况下,它将在某处删除第三行JW员工

我正在使用

df[df.apply(lambda x: x['Name'] in x['Description'], axis = 1)]
在这种情况下,它还删除了BQ的行,因为在描述中BQ是小写的。在这里,是否仍要使用相同的语法,但要考虑大小写敏感度?

使用.lower使其不区分大小写:

df[df.apply(lambda x: x['Name'].lower() in x['Description'].lower(), axis=1)]
请注意,这将考虑AM与艾米的匹配。您可能希望使用单词边界来防止这种情况:

>>> def filter(x): 
...     return bool(re.search(rf"(?i)\b{x['Name']}\b", x["Description"]))
...
>>> df[df.apply(filter, axis=1)]
  Name     Description
0   Am     Owner of Am
1   BQ  Employee at bq
或拆分,更好地处理正则表达式特殊字符:

df[df.apply(lambda x: x["Name"].lower() in x["Description"].lower().split(), axis=1)]
使用.lower使其不区分大小写:

df[df.apply(lambda x: x['Name'].lower() in x['Description'].lower(), axis=1)]
请注意,这将考虑AM与艾米的匹配。您可能希望使用单词边界来防止这种情况:

>>> def filter(x): 
...     return bool(re.search(rf"(?i)\b{x['Name']}\b", x["Description"]))
...
>>> df[df.apply(filter, axis=1)]
  Name     Description
0   Am     Owner of Am
1   BQ  Employee at bq
或拆分,更好地处理正则表达式特殊字符:

df[df.apply(lambda x: x["Name"].lower() in x["Description"].lower().split(), axis=1)]
你应该使用

df[df.apply(lambda x: x['Name'] in x['Description'].split(' '), axis = 1)]
你应该使用

df[df.apply(lambda x: x['Name'] in x['Description'].split(' '), axis = 1)]
您可以使用lower、split和isin:

输出:

  Name     Description
0   Am     Owner of Am
1   BQ  Employee at bq
细节 首先,我们使用str.lower将字符串转换为小写

print(df.Description.str.lower())
0           owner of am
1        employee at bq
2    employee somewhere
Name: Description, dtype: object
然后拆分字符串并展开列表:

print(df.Description.str.lower().str.split(expand=True))
          0          1     2
0     owner         of    am
1  employee         at    bq
2  employee  somewhere  None
然后我们用isin检查df.name的值

最后在轴1行中做任意一个,以查看是否至少有一个单词匹配:

print(df.Description.str.lower().str.split(expand=True).isin(df.Name.str.lower()).any(1))
0     True
1     True
2    False
dtype: bool
您可以使用lower、split和isin:

输出:

  Name     Description
0   Am     Owner of Am
1   BQ  Employee at bq
细节 首先,我们使用str.lower将字符串转换为小写

print(df.Description.str.lower())
0           owner of am
1        employee at bq
2    employee somewhere
Name: Description, dtype: object
然后拆分字符串并展开列表:

print(df.Description.str.lower().str.split(expand=True))
          0          1     2
0     owner         of    am
1  employee         at    bq
2  employee  somewhere  None
然后我们用isin检查df.name的值

最后在轴1行中做任意一个,以查看是否至少有一个单词匹配:

print(df.Description.str.lower().str.split(expand=True).isin(df.Name.str.lower()).any(1))
0     True
1     True
2    False
dtype: bool

是的。下限也应该与。拆分一起添加。这里是df[df.applylambda x:x['Name'].x['Description']中的lower.split'',axis=1]。谢谢@ggorlensplit默认情况下按空格拆分,.split就足够了。是的。lower也应该与.split一起添加。这里是df[df.applylambda x:x['Name'].x['Description']中的lower.split'',axis=1]。谢谢@ggorlensplit默认情况下按空格拆分,.split就足够了。第一种解决方案的问题是Am是Am的所有者,也是Amy的所有者,在第二种情况下,它不会给出所需的输出,IIUC.OP实际上没有指定子字符串有问题,这只是我的猜测/建议。只有当字符串中有正则表达式特殊字符时,第二个才会失败。您可以使用split,这可能更好。不过,出于好奇,它怎么会失败呢?没错,你是对的,OP没有指明问题所在。但是如果是这样的话,我的意思是,如果是关于子串,第一个就不起作用了。不,第二个是很棒的,它不会在猜测的子串问题中失败:!第一种解决方案的问题是,Am是Am的所有者,也是Amy的所有者,在第二种情况下,它不会给出所需的输出,IIUC.OP并没有真正指定子字符串存在问题,这只是我的猜测/建议。只有当字符串中有正则表达式特殊字符时,第二个才会失败。您可以使用split,这可能更好。不过,出于好奇,它怎么会失败呢?没错,你是对的,OP没有指明问题所在。但是如果是这样的话,我的意思是,如果是关于子串,第一个就不起作用了。不,第二个是很棒的,它不会在猜测的子串问题中失败:!谢谢@ggorlen,是的,刚刚编辑了答案,您可以在没有tolist的情况下比较该列。谢谢@ggorlen,是的,刚刚编辑了答案,您可以在没有tolist的情况下比较该列。