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

Python遍历DataFrame行列替换NaN值时遇索引报错求助

解决DataFrame每行NaN替换为第一列值的问题

首先得帮你理清报错的核心原因:你代码里for column in row这一步,遍历的是该行每个单元格的数值,而不是列名!比如当某行第一列是4.0时,你就会把4.0当成列名去row.loc[column]查找,自然会出现"标签不在列索引中"的错误——毕竟你的列名不可能是4.0这种数值对吧?

另外还有个隐藏问题:iterrows()返回的row是原DataFrame的副本,你直接修改row.loc[column]不会同步到原数据里,就算不报错,最终也达不到修改效果。

下面给你两种解决方案,按需选择:

方案1:修复循环写法(适合小数据集)

如果你习惯用循环,改成遍历列名而非单元格数值,同时直接修改原DataFrame:

import pandas as pd

for index, row in rawdata3.iterrows():
    # 取出当前行第一列的值,用iloc按位置取更稳妥
    first_val = row.iloc[0]
    # 遍历除第一列外的所有列名
    for col in rawdata3.columns[1:]:
        # 用pandas的isna判断空值,比math.isnan兼容更多空值类型(比如None)
        if pd.isna(row[col]):
            # 用at直接修改原DataFrame的指定位置,避免副本问题
            rawdata3.at[index, col] = first_val

方案2:向量化操作(推荐,高效简洁)

pandas最擅长的就是向量化操作,完全不用写循环,一行代码搞定:

# 选中除第一列外的所有列,用每行第一列的值填充其中的NaN
rawdata3.iloc[:, 1:] = rawdata3.iloc[:, 1:].fillna(rawdata3.iloc[:, 0], axis=0)

这里axis=0表示按行匹配,让每行的NaN都用该行第一列的值填充,效率比循环高N倍,尤其是数据量大的时候,强烈推荐这种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:40:18