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

pandas访问DataFrame字典列嵌套键报KeyError如何解决

报错原因

你写的df['d']['latitude']触发KeyError,本质是混淆了Series索引和单元格内字典的键:df['d']返回的是整列的Series对象,它的索引是DataFrame的行号(0到6004),不存在名为latitude的索引项,自然找不到对应值。latitude、longitude是d列每个单元格里存储的字典的内部键,不属于DataFrame/Series的索引层级,不能直接按列索引的链式写法调用。

你的d列数据结构如下:

Index(['_id', 'd'], dtype='object')
0             {'latitude': 35.685, 'longitude': 139.7514}
1                  {'latitude': 60.0, 'longitude': -95.0}
2       {'latitude': 54.94499999999999, 'longitude': -...
3       {'latitude': 41.32740000000001, 'longitude': -...
4       {'latitude': 42.83330000000001, 'longitude': 1...
                              ...
6000         {'latitude': 41.1412, 'longitude': -73.2637}
6001                {'latitude': 52.5, 'longitude': 5.75}
6002    {'latitude': 1.3667000000000087, 'longitude': ...
6003         {'latitude': 41.1412, 'longitude': -73.2637}
6004    {'latitude': 45.16669999999999, 'longitude': 2...
Name: d, Length: 6005, dtype: object
正确访问方法

按你的使用场景选对应写法就行:

  • 提取全量纬度/经度序列:用pandas的str访问器直接提取字典键,写法最简单,对空值兼容性好
    # 提取所有行的纬度
    all_lat = df['d'].str['latitude']
    # 提取所有行的经度
    all_lon = df['d'].str['longitude']
    
    返回结果是和原DataFrame长度一致的Series,可以直接打印、做计算,也可以直接赋值成新列:df['latitude'] = df['d'].str['latitude']。
  • 一次性把字典拆成独立列:如果后续要频繁用经纬度做计算,直接把d列的字典展开成单独的列更方便
    # 把d列每个字典转成单列Series,生成经纬度两列
    coord_df = df['d'].apply(pd.Series)
    # 把新生成的经纬度列拼回原表
    df = pd.concat([df, coord_df], axis=1)
    
    处理完之后直接用df['latitude']、df['longitude']就能访问对应字段,不用再操作字典。
  • 取某一行的经纬度值:先定位到对应行的单元格,再取字典的键
    # 取索引为0的行的纬度值
    first_row_lat = df.loc[0, 'd']['latitude']
    

注意:如果d列里有空值、非字典类型的内容,str['键名']的写法会自动返回空值,不会抛异常中断代码,比自己写逐行循环、lambda判断的稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:51:19