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

Pandas遍历DataFrame单元格修改非空值处理缺失值报错解决

报错原因拆解

  • 第一个ValueError报错:df.isnull().any(axis=1)返回的是所有行的布尔值序列,无法直接在单个行的if判断中作为布尔值使用,逻辑上你本来想判断当前行x的第12列是否为空,实际写的是判断整个df所有行是否存在空值,完全不匹配需求。
  • 后续两次的TypeError报错:缺失值NaN在pandas中默认是float类型,你没有先判断单元格是否为空,直接执行matches[0] in 单元格值的操作,当单元格是NaN(float类型)时,in操作符无法对float做遍历判断,就会抛出该错误。第三次代码里的pd.notnull(x)是判断行索引x是否为空,完全没有判断目标单元格的值,所以错误没有解决。

修复后的遍历写法

如果要保留遍历的写法,调整判断顺序,先做非空和类型判断,再做匹配判断:

import pandas as pd
matches = ['some string1', 'some string2']

for x in range(len(df.index)):
    current_cell = df.iloc[x, 12]
    # 先判断非空,再判断是字符串类型,最后判断是否包含目标字符串
    if pd.notna(current_cell) and isinstance(current_cell, str) and matches[0] in current_cell:
        df.iloc[x, 12] = "Something"

更推荐的向量化写法(效率更高,无需遍历)

pandas原生的向量化操作比逐行遍历性能高很多,尤其是数据量较大时优先使用:

import pandas as pd
matches = ['some string1', 'some string2']
col_12 = df.columns[12]

# 构造匹配条件:非空、包含matches[0]
mask = df[col_12].astype(str).str.contains(matches[0], na=False)
# 对匹配到的行直接赋值
df.loc[mask, col_12] = "Something"

这里str.contains的na=False参数会自动将空值对应的判断结果设为False,不需要额外写非空判断,astype(str)避免了非字符串类型值导致的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:51:03