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

pandas通过lambda遍历所有行统计排除NA/NULL的已填充字段数的问题

原有代码核心问题排查
  • 列选取语法错误:pandas选取多列时需传入由列名组成的列表,原代码直接在单层方括号内用逗号分隔列名,会被识别为单个元组键触发KeyError,且'project_c'列名缺少闭合引号,直接触发语法错误。
  • 缺失值判断逻辑失效:原判断条件x != "NA" or np.nan完全不符合预期,一方面np.nan与任意值比较都会返回False,无法真正识别空值,另一方面条件混用了常量对象,无法实现“排除字符串NA、空值的有效统计”逻辑。
  • apply作用粒度错误:原lambda逻辑是对单元格做值判断累加,没有按行维度聚合统计有效单元格数量,无法输出每行的统计结果。
正确实现方案

首先需要统一识别两类无效值:文本形式的"NA"、pandas标准空值(np.nan、None),再按行统计有效填充数,以下是两种可直接运行的实现:

  1. 适配lambda逐行处理需求的写法
import numpy as np
import pandas as pd

# 统一将文本"NA"替换为pandas可识别的标准缺失值
proj_table = proj_table.replace("NA", np.nan)
# 明确需要统计的列范围
stat_columns = ['project_id', 'project_a', 'project_b', 'project_c', 'project_d', 'project_e']
# 按行(axis=1)应用lambda统计非空值数量
proj_table['field_populated'] = proj_table[stat_columns].apply(
    lambda row: row.notna().sum(),
    axis=1
)
  1. 性能更优的向量化写法(适配大数据量场景,无需逐行遍历)
import numpy as np

stat_columns = ['project_id', 'project_a', 'project_b', 'project_c', 'project_d', 'project_e']
proj_table['field_populated'] = (
    proj_table[stat_columns]
    .replace("NA", np.nan)
    .notna()
    .sum(axis=1)
)

以上两种写法的输出结果和示例期望完全匹配:逐行统计时会自动跳过所有文本"NA"、空值,累计有效填充的单元格数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 08:15:06