如何将JSON字典通过Jupyter Notebook/Pandas转换为DataFrame并导出CSV?
解决方法:将嵌套JSON字典转换为DataFrame并导出CSV
你直接对顶层字典使用pd.json_normalize导致报错,核心原因是顶层字典里的items才是包含具体记录的数组,其他字段属于元数据。正确做法是针对items数组做归一化,同时按需合并顶层元数据。
步骤1:正确调用pd.json_normalize
import pandas as pd # 你的JSON字典数据 json_search_result = {'inactive_count': 0, 'links': {'self': '/company/08892216/officers'}, 'etag': '1ccc4c74454bc359a9b9ef686d11e70cc03b6cb8', 'kind': 'officer-list', 'resigned_count': 0, 'total_results': 1, 'active_count': 1, 'items_per_page': 35, 'items': [{'date_of_birth': {'year': 1964, 'month': 2}, 'links': {'self': '/company/08892216/appointments/Ao1-pIsFQHy0FVSv26y6ep4Qhyw', 'officer': {'appointments': '/officers/JpJgO2pKVmGq5VHD7j7lluLW-jo/appointments'}}, 'officer_role': 'director', 'address': {'premises': '19', 'locality': 'London', 'country': 'United Kingdom', 'address_line_1': 'Norcott Road', 'postal_code': 'N16 7EJ'}, 'appointed_on': '2014-02-12', 'nationality': 'Irish', 'country_of_residence': 'England', 'name': 'FLOOD, Eileen', 'occupation': 'Company Director'}], 'start_index': 0} # 针对items数组归一化,同时提取顶层元数据 df = pd.json_normalize( json_search_result['items'], meta=[ 'inactive_count', 'resigned_count', 'total_results', 'active_count', 'items_per_page', 'start_index', 'kind', 'etag', ['links', 'self'] # 提取顶层嵌套的links.self字段 ] )
步骤2:查看处理结果
执行后,嵌套字段会自动用点号展开列名(如date_of_birth.year、address.locality),顶层元数据会作为附加字段添加到每一行(因只有1条记录,所有行元数据值相同)。
步骤3:导出为CSV
df.to_csv('officers_data.csv', index=False)
关键说明
pd.json_normalize的第一个参数必须是数组类型的JSON数据,因此传入json_search_result['items']而非整个字典。meta参数用于指定需要从顶层字典提取并合并到DataFrame的字段,嵌套字段用列表形式(如['links', 'self'])指定路径。- 若不需要顶层元数据,直接执行
pd.json_normalize(json_search_result['items'])即可得到仅包含items记录的DataFrame。
内容的提问来源于stack exchange,提问作者matc
相关产品推荐
相关产品推荐

