You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas的query方法筛选genre列为空列表的行?

用Pandas query筛选genre列为空列表的行

你已经成功用query筛选出genre列包含'comedy'的行,现在要筛选空列表的行,之前的str.contains写法不适用,因为空列表没有元素,字符串匹配的逻辑在这里不生效。下面是两种可行的解决方案:

方法一:通过列表长度判断

空列表的长度为0,直接用str.len()获取每个列表的长度并判断是否等于0即可:

import pandas as pd
df = pd.DataFrame({"genre":[['comedy', 'sci-fi'], ['action', 'romance', 'comedy'], ['documentary'], ['crime','horror'], []]})
# 筛选genre为空列表的行
df.query("genre.str.len() == 0", engine="python")

方法二:直接匹配空列表

在query中直接判断genre是否等于空列表[],注意要指定engine="python",因为默认的numexpr引擎不支持列表的直接比较:

df.query("genre == []", engine="python")

为什么之前的写法失败?

你用~(genre.str.contains('\\w*', na=False, regex=True))的思路有问题:\w*在正则中匹配空字符串或任意字母数字组合,对于非空列表里的元素,str.contains会因为元素包含空字符串而返回True,取反后变成False;而空列表本身没有元素,str.contains返回False,取反后是True——理论上应该能选到空列表,但实际因为正则匹配逻辑在列表列上的行为不符合预期,导致筛选结果不对。用长度判断或直接匹配空列表的方式更直观可靠。

内容的提问来源于stack exchange,提问作者NBur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:41:07