Python&Pandas:如何查询列表类型列是否包含某些内容?

2024-06-16 10:33:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,里面有关于电影的信息。它有一个名为genre的列,其中包含它所属的流派列表。例如:

df['genre']

## returns 

0       ['comedy', 'sci-fi']
1       ['action', 'romance', 'comedy']
2       ['documentary']
3       ['crime','horror']
...

我想知道如何查询数据帧,以便它返回属于cerain类型的电影?

例如,df['genre'].contains('comedy')返回0或1。

我知道我可以做如下事情:

'comedy' in  ['comedy', 'sci-fi']

然而,在pandas中,我没有找到类似的东西,我只知道df['genre'].str.contains(),但它不适用于列表类型。


Tags: 数据信息类型df列表电影actionreturns
3条回答

可以使用^{}创建mask,然后使用^{}

mask = df.genre.apply(lambda x: 'comedy' in x)
df1 = df[mask]
print (df1)
                       genre
0           [comedy, sci-fi]
1  [action, romance, comedy]

根据source code,可以使用.str.contains(..., regex=False)

使用集合

df.genre.map(set(['comedy']).issubset)

0     True
1     True
2    False
3    False
dtype: bool

df.genre[df.genre.map(set(['comedy']).issubset)]

0             [comedy, sci-fi]
1    [action, romance, comedy]
dtype: object

以我更喜欢的方式呈现

comedy = set(['comedy'])
iscomedy = comedy.issubset
df[df.genre.map(iscomedy)]

效率更高

comedy = set(['comedy'])
iscomedy = comedy.issubset
df[[iscomedy(l) for l in df.genre.values.tolist()]]

在两个过程中使用str
慢点!也不完全准确!

df[df.genre.str.join(' ').str.contains('comedy')]

相关问题 更多 >