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

Pandas如何删除指定列的列表值中包含特定字符串的行

问题原因分析

你原来的代码存在三个核心错误,导致无法正常运行:

  • for row in df 迭代得到的是DataFrame的列名,不是行索引/行数据,df.drop(row) 实际在尝试删除列,和需求完全不符
  • 遍历DataFrame的过程中直接删除行,会导致索引动态偏移,出现漏删、错删的情况
  • 三层嵌套循环时间复杂度极高,完全不符合pandas矢量化操作的设计逻辑,数据量稍大就会出现性能问题

正确实现方案

用pandas的布尔索引+自定义判断逻辑,一行代码即可完成需求:

# 筛选出prescript列的列表中不存在包含"complementary"元素的行
df = df[~df['prescript'].apply(lambda x: any("complementary" in element for element in x))]

代码说明

  1. df['prescript'].apply(lambda x: ...) 对prescript列的每个列表值做自定义判断
  2. any("complementary" in element for element in x) 只要列表中任意元素包含目标字符串就返回True
  3. ~ 是布尔取反运算符,也就是我们要保留判断结果为False的行(即列表中没有目标字符串的行)
  4. 最终用布尔索引筛选符合条件的行赋值给df即可

如果追求更高的执行效率,也可以用列表推导式替代apply,处理大数据量时速度更快:

mask = [not any("complementary" in e for e in lst) for lst in df["prescript"]]
df = df[mask]

测试验证

你可以用下面的测试用例验证效果:

import pandas as pd
# 构造测试数据
df = pd.DataFrame({
    "id": [1, 2, 3],
    "prescript": [
        ["常规处方", "complementary附加处方", "其他"],
        ["常规处方A", "常规处方B"],
        ["complementary特需处方"]
    ]
})
# 执行筛选
df = df[~df['prescript'].apply(lambda x: any("complementary" in element for element in x))]
print(df)

执行后只会保留id为2的行,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:45:05