使用pandas访问API返回的JSON嵌套字段时触发KeyError该如何解决
KeyError问题解决方法
- 核心原因
触发KeyError的核心原因有两个:
df['trainingInput']列存储的是字符串格式的字典,不是Python原生的字典对象,无法直接通过字典key取值- 多引号的写法错误,额外的引号会被识别为key的一部分,导致无法匹配到真实的字段名
- 解决步骤
- 先将
trainingInput列的字符串转为原生字典,推荐用安全的ast.literal_eval方法:
import ast # 转换列格式,已兼容部分行值为空的场景 df['trainingInput'] = df['trainingInput'].apply(lambda x: ast.literal_eval(x) if isinstance(x, str) else x)
- 从转换后的字典列提取字段,用
get方法做容错处理,避免部分行无对应字段时报错:
df['region'] = df['trainingInput'].apply(lambda x: x.get('region')) df['serviceaccount'] = df['trainingInput'].apply(lambda x: x.get('serviceAccount'))
- 如果是从原始
job变量取值,直接使用常规引号写法即可,不要加多余引号:
# 正确写法 region = job['trainingInput']['region'] service_account = job['trainingInput']['serviceAccount']
- 排查验证方法
执行print(type(df['trainingInput'].iloc[0])),如果输出为<class 'str'>则说明确实是格式未转换的问题,转换后输出为<class 'dict'>即可正常取值。
如果你的原始JSON存在示例中多余逗号的语法问题,需要先清理异常符号后再做解析。
内容的提问来源于stack exchange,提问作者Maa
相关产品推荐
相关产品推荐

