如何将嵌套JSON扁平化处理为指定格式的DataFrame?
扁平化嵌套JSON并生成指定格式的DataFrame
你需要将嵌套JSON扁平化,把嵌套层级用下划线连接为列名,当前代码生成的结果存在多余的data列,且data子字段的列名缺少data_前缀,无法匹配预期格式。
修改后的代码
import pandas as pd import json json_data = ''' { "appVersion": "0.0.3", "device": { "model": "Lenovo" }, "bef": { "catalog": "Manual" }, "data": [ { "timestamp": "2024-04-24 12:08:02.415077", "label": "zuf", "category": "50" } ] } ''' parsed_json = json.loads(json_data) # 利用json_normalize一次性处理嵌套结构和数组展开 df = pd.json_normalize( parsed_json, record_path='data', # 指定要展开的数组字段 meta=[ 'appVersion', ['device', 'model'], # 嵌套字段的层级路径 ['bef', 'catalog'] ], sep='_' # 嵌套字段的连接符 ) # 调整列顺序并重命名data相关字段 df = df[['appVersion', 'device_model', 'bef_catalog', 'timestamp', 'label', 'category']] df = df.rename(columns={ 'timestamp': 'data_timestamp', 'label': 'data_label', 'category': 'data_category' }) # 可选:将时间戳截取为三位小数格式 df['data_timestamp'] = df['data_timestamp'].str[:23] print(df)
代码说明
record_path='data':告诉json_normalize展开data数组中的每个对象,作为DataFrame的行数据meta参数:指定需要从JSON顶级结构中提取的字段,嵌套字段用列表表示层级(如['device', 'model'])sep='_':自动将嵌套字段的层级转换为下划线连接的列名,比如device.model变为device_model- 最后调整列顺序并给原
data数组内的字段添加data_前缀,完全匹配你期望的格式 - 时间戳截取是可选操作,用于和你给出的预期结果格式保持一致
运行结果
appVersion device_model bef_catalog data_timestamp data_label data_category 0 0.0.3 Lenovo Manual 2024-04-24 12:08:02.415 zuf 50
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

