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

Spark DataFrame转Pandas DataFrame后通过下标访问单元格出现KeyError: 0的问题咨询

Spark DataFrame转Pandas DataFrame后通过下标访问单元格出现KeyError: 0的问题咨询

嗨,我来帮你捋清楚这个问题~

你遇到的KeyError: 0,核心原因是Pandas DataFrame的方括号[]默认是按「列标签(列名)」来索引的,而不是列的位置下标。

你用pandasDF[0]的时候,Pandas会去你的DataFrame里找列名为0的列,但显然你的DF列名不是0(应该是原来Spark DF里的那两个列名),所以直接报错找不到这个列。

解决方法有这几种:

  • 用.iloc按位置索引(最推荐):.iloc专门用来按行和列的位置下标访问数据,格式是iloc[行下标, 列下标],所以你要访问第0行第1列的单元格,直接写:

    print(pandasDF.iloc[0, 1])
    

    也可以拆分写print(pandasDF.iloc[0][1]),不过更推荐前者的写法,更清晰高效。

  • 先获取列名再用方括号访问:如果你坚持想用方括号,可以先通过位置拿到对应的列名,再访问行:

    # 获取第1列的列名
    target_col = pandasDF.columns[1]
    # 访问第0行该列的单元格
    print(pandasDF[target_col][0])
    
  • 用.iat访问单个元素:如果只是访问单个单元格,.iat比.iloc更高效,用法和iloc类似:

    print(pandasDF.iat[0, 1])
    

补充说明

Pandas里的索引逻辑和你想的有点不一样:

  • df[xxx]:只能用来按列标签取整列,或者按布尔数组过滤行
  • df.loc[行标签, 列标签]:按行/列的标签索引
  • df.iloc[行下标, 列下标]:按行/列的位置下标索引
  • df.iat[行下标, 列下标]:专门针对单个元素的位置索引,性能更好

你之前的报错堆栈也能印证这个问题:看报错信息里的indexer = self.columns.get_loc(key),这里Pandas正在尝试从列索引里找key=0的位置,找不到就抛出了KeyError。

/databricks/python/lib/python3.8/site-packages/pandas/core/frame.py in __getitem__(self, key)
3022             if self.columns.nlevels > 1:
3023                 return self._getitem_multilevel(key)
-> 3024             indexer = self.columns.get_loc(key)
3025             if is_integer(indexer):
3026                 indexer = [indexer]
/databricks/python/lib/python3.8/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
3080                 return self._engine.get_loc(casted_key)
3081             except KeyError as err:
-> 3082                 raise KeyError(key) from err

备注:内容来源于stack exchange,提问作者Mikesama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:49:09