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

为何df.iloc可正常访问单元格,但df.at却报错?

推测df.at[y, 'CleanCopy']报错的可能原因

首先得明确iloc和at的核心差异:iloc是**按整数位置(position)定位行/列,而at是按标签(label)**定位行/列——这俩功能看似类似,但底层逻辑完全不同,这大概率是你遇到问题的根源。结合你的描述,我整理了几个最可能的原因:

  • 行索引标签与整数位置不匹配
    这是最常见的情况。比如你的原数据集df的行索引可能不是连续的整数序列(比如索引是[0, 1, 3, 4],或者是字符串、日期类型),而你用的y是整数位置值。举个例子:

    # 模拟一个索引不连续的数据集
    df = pd.DataFrame(
        [['ADNER FRANCISCO'], ['TEST']],
        columns=['CleanCopy'],
        index=[0, 2]  # 索引跳过了1
    )
    y = 1  # 这是iloc的位置,对应第二行
    print(df.iloc[y]['CleanCopy'])  # 正常输出TEST
    print(df.at[y, 'CleanCopy'])    # 报错KeyError: 1,因为索引里没有标签1
    

    你可以先运行print(df.index)查看原数据集的行索引,确认y是不是存在于索引标签中。

  • 链式索引的“意外生效”
    你用的df.iloc[y]['CleanCopy']属于链式索引(先取行再取列),这种方式在某些情况下会返回一个临时的Series对象,即便原数据集的索引有问题,可能刚好“蒙对”了值;但at是直接定位的方法,对索引标签的准确性要求更高,一旦标签不匹配就会直接报错。

  • 列名存在隐形字符(可能性较低)
    虽然df.iloc[y]['CleanCopy']能正常输出,但也不排除原数据集的列名CleanCopy存在隐形空格、大小写差异(比如实际是'Clean Copy'或者'cleancopy'),不过这种情况链式索引也会报错,所以概率不高。你可以运行print(df.columns)确认列名的准确写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:26