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

Pandas报错AttributeError: 'float' object has no attribute 'isnull'如何解决?

错误原因
  • 报错核心是iterrows()返回的行中单个字段为原生float类型,空值对应NaN,原生float没有isnull()方法,isnull()是pandas复合对象(Series/ DataFrame)的专属方法。
  • 额外隐藏问题:直接修改row对象不会同步更新原DataFrame,因为iterrows()返回的是行数据的拷贝而非视图。
原有循环代码的修复方案

将空值判断替换为pandas通用的空值检测函数pd.isna()/pd.notna(),同时通过df.loc直接修改原DataFrame:

import pandas as pd

for index, row in df.iterrows():
    # 补全TMIN:TAVG、TMAX非空,TMIN为空时计算填充
    if pd.isna(row["TMIN"]) and pd.notna(row["TAVG"]) and pd.notna(row["TMAX"]):
        df.loc[index, "TMIN"] = 2 * row["TAVG"] - row["TMAX"]
    # 补全TMAX:TAVG、TMIN非空,TMAX为空时计算填充
    if pd.isna(row["TMAX"]) and pd.notna(row["TMIN"]) and pd.notna(row["TAVG"]):
        df.loc[index, "TMAX"] = 2 * row["TAVG"] - row["TMIN"]
    # 补全TAVG:TMIN、TMAX非空,TAVG为空时计算填充
    if pd.isna(row["TAVG"]) and pd.notna(row["TMIN"]) and pd.notna(row["TMAX"]):
        df.loc[index, "TAVG"] = (row["TMIN"] + row["TMAX"]) / 2
更高效的向量化替代方案

无需循环,直接使用pandas内置的向量化操作实现相同效果,性能远高于逐行遍历,适合大数据量场景:

import pandas as pd

# 优先补全TAVG:TMIN和TMAX都非空时用平均值填充空值
df['TAVG'] = df['TAVG'].fillna((df['TMIN'] + df['TMAX']) / 2)
# 补全TMIN:TAVG和TMAX都非空时用公式计算填充空值
df['TMIN'] = df['TMIN'].fillna(2 * df['TAVG'] - df['TMAX'])
# 补全TMAX:TAVG和TMIN都非空时用公式计算填充空值
df['TMAX'] = df['TMAX'].fillna(2 * df['TAVG'] - df['TMIN'])

该方案逻辑和原有需求完全一致:只有当另外两个温度值都非空时,才会计算填充空值,其余情况会保留原始空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:06:01