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

如何无需exec()实现Pandas中不确定数量条件的行删除?

问题

需要在Pandas DataFrame中根据不确定数量的列值条件删除行,目前通过拼接Python代码字符串并用exec()执行实现,希望找到无需exec()的替代方案。

替代实现

可以通过构建布尔掩码的方式实现,完全规避exec()的安全风险,代码更直观易维护,以下是两种可行方案:

方案一:逐步累积掩码

import pandas as pd

class DelTest:
    def __init__(self, df) -> None:
        self.df = df.copy()  # 复制原DataFrame,避免修改原始数据

    def deleteRows(self, conditions):
        # 初始化掩码:所有行默认保留
        mask = pd.Series(True, index=self.df.index)
        for cond in conditions:
            # 叠加条件:将满足删除条件的行从掩码中排除
            mask &= ~(self.df[cond['col']] == cond['val'])
        # 用掩码过滤DataFrame,得到最终结果
        self.df = self.df[mask]
        return self.df

方案二:批量生成条件后聚合

import pandas as pd

class DelTest:
    def __init__(self, df) -> None:
        self.df = df.copy()

    def deleteRows(self, conditions):
        # 生成所有条件的布尔序列,按行判断是否全部满足删除条件
        delete_mask = pd.concat(
            [self.df[cond['col']] == cond['val'] for cond in conditions],
            axis=1
        ).all(axis=1)
        # 保留不满足删除条件的行
        self.df = self.df[~delete_mask]
        return self.df
测试验证

使用原问题中的测试用例验证:

# 测试条件
condition1 = [{'col': 'value1', 'val': 0}]
condition2 = [{'col': 'value1', 'val': 0}, {'col': 'value2', 'val': 0}]

# 构造测试DataFrame
df = pd.DataFrame(
    data=[['A', 2, 0], ['B', 5, 1], ['C', 0, 1], ['X', 0, 1], ['X', 0, 0]],
    columns=['name', 'value1', 'value2']
)

print("原DataFrame:")
print(df)
print("\n执行condition1后结果:")
print(DelTest(df).deleteRows(condition1))
print("\n执行condition2后结果:")
print(DelTest(df).deleteRows(condition2))

输出结果与原exec()实现完全一致:

原DataFrame:
  name  value1  value2
0    A       2       0
1    B       5       1
2    C       0       1
3    X       0       1
4    X       0       0

执行condition1后结果:
  name  value1  value2
0    A       2       0
1    B       5       1

执行condition2后结果:
  name  value1  value2
0    A       2       0
1    B       5       1
2    C       0       1
3    X       0       1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:30:58