抓取JSON数据后如何将nilai列拆分为独立表格列?
解决nilai列拆分问题
你的nilai列存储的是嵌套字典结构,默认的pd.json_normalize未完全展开这部分数据,因此需要单独处理嵌套的字典内容。以下是修改后的完整代码,可将nilai中的值拆分为独立列:
import requests import pandas as pd # 抓取目标JSON数据 response = requests.get("https://ditppu.menlhk.go.id/apippu/gis/sebaranEnergi/tahun/2022/param//kategori//subkategori/") data = response.json() # 定义需要提取的行键(用列表替代元组,更易维护) selected_row_keys = [ '32', '14', '36', '35', '64', '74', '16', '31', '94', '12', '33', '15', '11', '21', '72', '63', '52', '13', '73', '62', '18', '19', '51', '65', '53', '61', '82', '71', '34', '91', '81', '75', '17', '76' ] # 提取指定行的数据 data1 = [data['rows'][key] for key in selected_row_keys] # 1. 将外层数据转为DataFrame df = pd.json_normalize(data1) # 2. 把nilai列的嵌套字典拆分为独立列 nilai_df = pd.DataFrame(df['nilai'].tolist()) # 3. 合并原数据(移除nilai列)与拆分后的nilai数据 final_df = pd.concat([df.drop('nilai', axis=1), nilai_df], axis=1) # 保存到Excel文件 final_df.to_excel('klhk.xlsx', index=False)
关键步骤说明
- 用列表推导式替代手动拼接的元组,后续修改行键时更方便;
pd.DataFrame(df['nilai'].tolist())会把nilai列中的每个字典转换为一行数据,自动将字典的键作为新的列名;pd.concat实现原数据(已移除nilai列)与拆分后数据的横向合并,最终得到完全扁平化的表格。
如果希望保留nilai_前缀作为列名,也可以直接用pd.json_normalize(data1, sep='_'),无需额外拆分合并,生成的列名将是nilai_xxx格式。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

