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

Pandas中基于字符串过滤列表类型列返回空DataFrame问题求助

解决Pandas中列表类型列的字符串过滤问题

你的问题出在str.contains方法仅适用于字符串类型的列,而tags列的每个元素是列表对象,所以该方法无法识别列表中的内容,导致返回空DataFrame。

以下是几种可行的解决方案:

方法1:使用apply直接检查列表内容

最直接的方式是通过apply遍历每个列表,判断目标字符串是否存在:

df[df["tags"].apply(lambda x: "smart_home" in x)]

这个方法会逐行检查tags列的列表,返回包含目标字符串的行。

方法2:支持不区分大小写的过滤

如果需要忽略字符串大小写(比如列表中可能出现Smart_Home这类变体),可以修改判断逻辑:

df[df["tags"].apply(lambda x: any("smart_home".lower() in item.lower() for item in x))]

这里用any()配合生成器表达式,检查列表中是否有任意元素包含目标字符串(大小写统一转小写后匹配)。

方法3:通过explode展开列表后过滤

先将列表拆分为多行(每行对应一个标签),再用熟悉的str.contains过滤,最后去重还原原行:

# 展开列表为多行
df_exploded = df.explode("tags")
# 过滤后去重,保留原行数据
result = df_exploded[df_exploded["tags"].str.contains("smart_home", case=False)].drop_duplicates()

这种方法适合需要对标签做更多后续处理的场景,但要注意原数据索引的唯一性。

验证结果

针对你提供的示例数据,以上方法都会筛选出包含['app', 'oflline_hub', 'smart_home']和['get_mail_mail', 'smart_home']的两行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:10:49