从字典列表列提取国家缩写时循环报错问题求助
问题解答
A-你的代码错误可能出在这几个地方
- 存在异常数据:列里部分行的
production_countries是空列表,或者第一个字典里没有iso_3166_1键。你单个测试的是正常数据,但遍历全列时碰到了这类异常行,直接取值就触发KeyError。 - 把字符串当成了字典列表:如果数据库里存的是字符串格式的字典列表(比如
"[{'iso_3166_1': 'US'}]"),单个用切片能拿到字符,但循环时直接按字典取值就会出错——因为它本质是字符串,不是可直接索引的字典列表,得先转成对应数据类型。 - 循环逻辑有问题:比如你遍历列时,没对每一行的结构做校验,直接硬取
[0]['iso_3166_1'],忽略了空值、结构不符的情况。
举个修复的示例(基于Pandas):
import ast import pandas as pd def get_first_country_code(countries_data): try: # 若存储的是字符串格式,先转换为字典列表 countries_list = ast.literal_eval(countries_data) if isinstance(countries_data, str) else countries_data if countries_list and 'iso_3166_1' in countries_list[0]: return countries_list[0]['iso_3166_1'] else: return None # 异常情况返回空值 except: return None # 新增目标列 df['first_country_code'] = df['production_countries'].apply(get_first_country_code)
B-可以学习这些知识点
- Pandas嵌套数据处理:重点掌握
apply方法结合自定义函数处理复杂列,以及如何识别、转换DataFrame中的非标准数据类型(比如字符串化的列表/字典)。 - Python数据类型转换:学习
ast.literal_eval的用法,它能安全地把字符串格式的列表、字典转换成对应数据结构,比原生eval更安全可靠。 - 数据清洗的异常处理:掌握用
try-except捕获运行时异常,以及如何判断空值、缺失键等情况,保证遍历全列时不会因个别异常行中断程序。
内容的提问来源于stack exchange,提问作者Noemi
相关产品推荐
相关产品推荐

