繁体   English   中英

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

[英]pandas dataframe-python check if string exists in another column ignoring upper/lower case

我有相同的 dataframe ( pandas dataframe 检查列是否包含另一列中存在的字符串

Name       Description
Am         Owner of Am
BQ         Employee at bq  
JW         Employee somewhere

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

我在用

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"视为"amy"的匹配项。 您可能希望使用单词边界来防止这种情况:

>>> 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

split更好地处理正则表达式特殊字符:

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)]

您可以使用lowersplitisin

msk=df.Description.str.lower().str.split(expand=True).isin(df.Name.str.lower()).any(1)
df[msk]

Output:

  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的值

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

最后在轴 1 中进行any操作(按行),以查看是否至少有一个单词匹配:

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

暂无
暂无

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

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