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

使用pandas iloc遇索引异常:批量取行报错但单取行正常?

Pandas索引操作问题解答

1. df.iloc[:][0]报KeyError:0的原因

df.iloc[:]返回整个DataFrame对象,此时后续的[0]是DataFrame默认的列索引取值操作——它会尝试寻找列名为0的列,而非按位置取第一列。如果你的DataFrame列名中没有0,就会触发KeyError。

正确按位置取第一列的写法:

df.iloc[:, 0]  # 逗号左侧指定行范围(:表示所有行),右侧指定列位置(0表示第一列)

如果是想取第一行,写法为:

df.iloc[0, :]  # 或简化为df.iloc[0]

2. 排查循环无输出的原因

你的循环基于content_df.shape[0]遍历,但操作的是df,可能存在以下问题:

  • 对象不匹配:content_df和df不是同一个DataFrame,两者行数不同。比如df行数少于content_df,遍历到超出df行数的索引时会触发异常,但如果except块未正确捕获(如缩进错误),就不会有输出。
  • 操作逻辑差异:df.iloc[i][0]和df.iloc[:][0]逻辑完全不同:df.iloc[i]返回一行数据(Series),此时[0]是取Series中索引为0的元素(即原DataFrame列名为0的列对应值)。如果df列名没有0,理论上循环应打印所有i,但无输出大概率是content_df与df行数一致,或except块未正常执行。

建议修改循环为直接遍历df行数,并明确捕获异常:

for i in range(df.shape[0]):
    try:
        df.iloc[i, 0]  # 用iloc直接指定行和列,避免Series索引混淆
    except Exception as e:
        print(f"行{i}报错:{e}")

3. df.iloc[:][2:]删行不删列的原因

df.iloc[:]返回整个DataFrame,后续的[2:]是DataFrame的行切片操作(整数切片时,[]默认处理行),因此会返回从第3行开始的所有行,而非删除前两列。

正确保留从第3列开始所有列的写法:

df.iloc[:, 2:]  # 逗号左侧:表示所有行,右侧2:表示从第3列(索引2)开始的所有列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:10:35