提问者:小点点

筛选器列包含所有子字符串


我试图在数据集中选择所有脆鸡肉三明治,我尝试过使用这个正则表达式,但它仍然有一些烤鸡肉三明治。这是密码

data_sandwich_crispy=data[数据['项目'].str.contains(r'^(?=.*脆)(?=.*三明治)(?=.*鸡)',正则表达式=真)]

下面是数据集的外观

任何修改,或链接回答真的很感激。如果有错误,我真的很抱歉,谢谢你所有的帮助!


共2个答案

匿名用户

这将是我的解决方案。它寻找单词脆皮后面跟着单词鸡肉后面跟着单词三明治的字符串。然而,可以有任意数量的空格或任何其他字符之间。

# some data
l = ["Crispy Chicken Sandwich", 
     "Grilled Chicken Sandwich", 
     "crispy Chicken Sandwich"]
data = pd.DataFrame(l, columns=["A"])
data
#       A
# 0     Crispy Chicken Sandwich
# 1     Grilled Chicken Sandwich
# 2     crispy Chicken Sandwich


# consider `case`
data[data['A'].str.contains(r'Crispy.+Chicken.+Sandwich', regex=True, case=False)]
#       A
# 0     Crispy Chicken Sandwich
# 2     crispy Chicken Sandwich

匿名用户

如果您的意思是收集所有只包含脆鸡肉沙的行,那么看看下面的替代解决方案。只有当所有三个单词(crispy、chicken和classic)都出现时,才会返回行:

data_sandwich_crispy = df[df['item'].str.contains(r'^(?=.*?\bcrispy\b)(?=.*?\bchicken\b)(?=.*?\bclassic\b).*$',regex=True)]

我创建了一个简单的数据框,如下所示:

item    id
premium crispy chicken classic sandwhich    10
premium grilled chicken classic sandwhich   15
premium club chicken classic sandwhich      14

运行上面给出的命令会产生以下输出:

item    id
premium crispy chicken classic sandwhich    10