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

如何用if/else块实现Pandas DataFrame高效数据验证?

DataFrame数据验证:可读性与性能的平衡方案

我们使用DataFrame存储采集到的数据,提交前需依据规则列表完成数据验证。在Python中搭建验证逻辑时,遇到了可读性与性能难以兼顾的问题。

示例验证规则

当F_System = 1、Facility_Type属于{1,2,6}且Pav_Rep_Method = 2时,Dir_Through_Lanes字段必须非空。

现有两种实现方式

1. apply逐行验证法

def sjpm201a(self):
    def sjpm201_check(row):
        print(row)
        if row['F_SYSTEM'] == 1 and row['FACILITY_TYPE'] in [1,2,6] and row['PAVE_REP_METHOD'] == 2:
            if row['DIR_THROUGH_LANES'] == np.nan:
                row['SJPM201'] = False
                return row
        row['SJPM201a'] = True
        return row
    self.df = self.df.apply(sjpm201_check, axis=1)
  • 优势:逻辑直观,易编写、易维护
  • 劣势:性能差,运行耗时约22秒

2. 布尔索引批量验证法

def sjpm201b(self):
    df = self.df
    self.df['SJPM201b'] = ((df['DIR_THROUGH_LANES'].notna()) | ((df['F_SYSTEM'] != 1) | (~df['FACILITY_TYPE'].isin([1,2,6])) | (df['PAVE_REP_METHOD'] != 2)))
  • 优势:性能极佳,运行耗时仅约0.01秒
  • 劣势:逻辑嵌套复杂(需转换与/或关系),规则越长越难编写和理解

需求

我们有上百条类似的验证规则,希望找到一种方案:既能用直观的if/else块编写逻辑,又能达到布尔索引级别的性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:30:13