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

Pandas字符串列非NaN值变量递增失效问题排查

问题分析

你的第二个if语句失效的核心原因是对NaN值的处理错误:当列值为NaN时,str(row["Service Médical "])会返回字符串"nan"而非空字符串"",这会导致条件str(...) != ""在值为NaN时误判为True;而如果列值是空字符串"",该条件又会误判为False,完全不符合你“值不为NaN时递增”的需求。

此外,直接通过row对象修改值的方式在apply中并非最优实现,还容易出现隐式错误。

修复后的逐行处理版本
import pandas as pd

def indicateur_iov2(row):
    # 初始化IOV2为指定数值列的求和结果
    row["IOV2"] = (
        row["Bon alimentaire"]
        + row["Bon Hygiène"]
        + row["Ticket Hammam / Pour les personnes en rue "]
        + row["Ticket Restaurant / Pour les personnes en rue "]
        + row["Kits cuisine / Pour les personnes avec un hébergement"]
    )

    # 检查Kit couchage列值是否为"Oui"
    if row["Kit couchage / Pour les personnes avec un hébergement"] == "Oui":
        row["IOV2"] += 1.0

    # 正确判断Service Médical列不为NaN
    if pd.notna(row["Service Médical "]):
        row["IOV2"] += 1.0

    # 正确判断Service Psychosociale列不为NaN
    if pd.notna(row["Service Psychosociale "]):
        row["IOV2"] += 1.0

    return row["IOV2"]

如果你的实际需求是值不为NaN且非空字符串时才递增,可将判断条件调整为:

if pd.notna(row["Service Médical "]) and row["Service Médical "] != "":
    row["IOV2"] += 1.0
更高效的矢量化实现(推荐)

使用Pandas的矢量化操作替代apply,速度更快且代码更简洁,尤其适合大数据集:

# 初始化IOV2为指定数值列的求和结果
df["IOV2"] = (
    df["Bon alimentaire"]
    + df["Bon Hygiène"]
    + df["Ticket Hammam / Pour les personnes en rue "]
    + df["Ticket Restaurant / Pour les personnes en rue "]
    + df["Kits cuisine / Pour les personnes avec un hébergement"]
)

# 针对Kit couchage列的条件递增
df.loc[df["Kit couchage / Pour les personnes avec un hébergement"] == "Oui", "IOV2"] += 1.0

# 针对Service Médical列不为NaN的条件递增
df.loc[pd.notna(df["Service Médical "]), "IOV2"] += 1.0

# 针对Service Psychosociale列不为NaN的条件递增
df.loc[pd.notna(df["Service Psychosociale "]), "IOV2"] += 1.0
额外注意事项
  • 核对列名一致性:你的代码中部分列名带有末尾空格(如"Service Médical "),需确保DataFrame中的实际列名与代码完全匹配,否则会因取到NaN值导致条件判断失效。
  • 确认数值列类型:确保Bon alimentaire等列是int/float类型,否则求和操作会变成字符串拼接而非数值相加,引发计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:57:40