如何无需指定表头将嵌套JSON通过Pandas转换为扁平化CSV
无需手动指定表头的嵌套JSON扁平化CSV实现方案
方法一:利用Pandas原生json_normalize快速处理
如果你的JSON结构以字典嵌套为主,少量列表嵌套在顶层,直接用pd.json_normalize并指定分隔符即可自动展开所有层级,无需手动指定表头:
import pandas as pd import json # 加载你的JSON数据(可以是从文件读取的列表或字典) with open('students.json', 'r') as f: student_data = json.load(f) # 自动扁平化所有嵌套层级,用点分隔嵌套键 df = pd.json_normalize(student_data, sep='.') # 导出为CSV df.to_csv('flattened_students.csv', index=False)
这个方法简洁高效,原生支持大部分常见嵌套结构,列名会自动以父键.子键的形式生成,比如student_details.contact.email。
方法二:递归函数处理复杂嵌套(含多层列表)
如果你的JSON包含多层嵌套的列表(比如学生有多组课程、多个联系人),上面的方法可能无法完全展开,这时可以写一个递归函数先把每个JSON条目转为单层字典,再转成DataFrame:
import pandas as pd import json def flatten_json(obj, parent_key='', sep='.'): items = [] for k, v in obj.items(): new_key = f"{parent_key}{sep}{k}" if parent_key else k # 处理嵌套字典 if isinstance(v, dict): items.extend(flatten_json(v, new_key, sep).items()) # 处理列表,给每个元素加索引标记 elif isinstance(v, list): for idx, item in enumerate(v): if isinstance(item, dict): items.extend(flatten_json(item, f"{new_key}[{idx}]", sep).items()) else: items.append((f"{new_key}[{idx}]", item)) # 普通键值对直接加入 else: items.append((new_key, v)) return dict(items) # 加载并处理数据 with open('students.json', 'r') as f: student_data = json.load(f) # 扁平化每个学生条目 flattened_list = [flatten_json(item) for item in student_data] # 转DataFrame并导出 df = pd.DataFrame(flattened_list) df.to_csv('fully_flattened_students.csv', index=False)
这种方法能处理任何深度的嵌套结构,列表元素会生成类似courses[0].name、courses[1].score的列名,完全保留原始数据的层级关系,且全程不需要手动指定任何列名或表头。
内容的提问来源于stack exchange,提问作者Aks3
相关产品推荐
相关产品推荐

