Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
Python 筛选数据框单元格中包含的数据框列表值_Python_Pandas_List_Filter - Fatal编程技术网

Python 筛选数据框单元格中包含的数据框列表值

Python 筛选数据框单元格中包含的数据框列表值,python,pandas,list,filter,Python,Pandas,List,Filter,我有一个dataframe,products`和一个包含分号分隔的标签列表的列,比如 Tags ________________ tag1;tag2;tag4 tag3;tag1 tag4;tag2;tag6 ...etc 我想筛选产品,查看标签列表中是否包含Tag2 我尝试了以下方法: products["Tag2" in products["Tags"].str.split(";", expand=True)] 但是接收KeyError:False 任何提示都将不胜感激 提前感谢。更好(

我有一个dataframe,products`和一个包含分号分隔的标签列表的列,比如

Tags
________________
tag1;tag2;tag4
tag3;tag1
tag4;tag2;tag6
...etc
我想筛选
产品
,查看标签列表中是否包含
Tag2

我尝试了以下方法:

products["Tag2" in products["Tags"].str.split(";", expand=True)]
但是接收
KeyError:False

任何提示都将不胜感激

提前感谢。

更好(更聪明)的方法是使用

df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
    Tags
0   tag1;tag2;tag4
1   tag3;tag1
2   tag4;tag22;tag6
3   tag2
df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
              Tags
0   tag1;tag2;tag4
3   tag2
输出:

              Tags
0   tag1;tag2;tag4
她是一个涵盖所有案例的更好的例子:

数据

df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
    Tags
0   tag1;tag2;tag4
1   tag3;tag1
2   tag4;tag22;tag6
3   tag2
df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
              Tags
0   tag1;tag2;tag4
3   tag2
代码

df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
    Tags
0   tag1;tag2;tag4
1   tag3;tag1
2   tag4;tag22;tag6
3   tag2
df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
              Tags
0   tag1;tag2;tag4
3   tag2
输出

df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
    Tags
0   tag1;tag2;tag4
1   tag3;tag1
2   tag4;tag22;tag6
3   tag2
df.loc[df['Tags'].str.get_dummies(';')['tag2'].eq(1)]
              Tags
0   tag1;tag2;tag4
3   tag2
您也可以使用:

您需要查找子字符串
tag2以便执行精确匹配

df.loc[(df.Tags+';').str.contains('tag2;')]
数据框中的标记列实际上包含字符串

因此,不要将这些字符串转换为列表,只需检查 每个字符串是否包含tag2:

结果(针对您的数据)是:


我认为这应该奏效:

products[products['tags'].apply(lambda x: 'tag2' in x.split(';'))]

df.Tags.str.contains('tag2')
?@harvpan,只要我正在搜索的标记不是我正在搜索的标记的子字符串,它就可以实现此目的。例如,上面将返回包含tag2和Tag22的行。签出答案。
product['Tags'].str.split(';',exand=True)。eq('tag2')。任何(1)
?也想到了这一点,但@QuangHoang是非常正确的;我非常感谢你的努力however@QuangHoang说得好,我以为标签以
结尾马上就要编辑了。让我猜一下
(df['Tags']+';')
:-)@QuangHoang如果我绝望的话,就不会使用这种方法;-)@harvpan如果tag2实际存在于数据集中,它就可以工作。不幸的是,如果数据集中不存在tag2,则此错误将通过一个
KeyError:tag2
输出。我需要它不返回任何行。谢谢你的回答,但是在tag2位于列表末尾的情况下,它不起作用。。。我可以在值后面加一个分号,但似乎我检查了tag1;tag4;tag2作为第一行,它确实出现在输出中。很自然,因为第一行仍然包含tag2(当然,在末尾,但这并不重要)。