如何拆分含多JSON数组的Pandas列,将数组键值转为DataFrame行列
将嵌套JSON的samples数组转换为Pandas DataFrame
核心处理逻辑
直接提取JSON结构中的samples数组作为数据源,同时处理嵌套字段(如utc下的$numberLong),将其展开为DataFrame的普通列。
代码实现
场景1:处理内存中的JSON对象
假设你已经将目标JSON加载为Python字典data:
import pandas as pd # 示例加载后的JSON字典 data = { "_id": {"$oid": "6090ba8fccd167ce183b5ebc"}, "day": "2021-05-04", "sensorType": "eurecam", "sensorid": "74", "first": {"$numberLong": "1620097683000"}, "last": {"$numberLong": "1620103653000"}, "nsamples": 200, "samples": [ { "occupancy_state": "1,0,0,0", "rtc_utc_time": "2021-05-04 03:07:58", "sdcard_site": "BE", "sdcard_chain": "DAG", "sdcard_line": "1,BE", "utc": {"$numberLong": "1620097683000"} }, # 更多样本项... ] } # 提取samples数组 samples_list = data["samples"] # 展开嵌套的utc字段 for item in samples_list: if "utc" in item and isinstance(item["utc"], dict): item["utc"] = item["utc"]["$numberLong"] # 转换为DataFrame df = pd.DataFrame(samples_list) print(df.head())
场景2:从JSON文件读取(如MongoDB导出的批量数据)
如果数据以每行一个JSON文档的形式存储在文件中,可结合json_normalize处理嵌套:
import pandas as pd from pandas import json_normalize # 读取JSON文件(每行一个独立文档) raw_df = pd.read_json("your_data_file.json", lines=True) # 展开samples数组并处理嵌套字段 samples_df = json_normalize(raw_df["samples"].explode()) # 若需保留原文档的全局字段(如sensorid、day),可合并到结果中 final_df = raw_df.drop("samples", axis=1).join(samples_df) print(final_df.head())
效果说明
转换后的DataFrame会将samples数组中的每个键(occupancy_state、rtc_utc_time等)作为列名,数组中的每个元素对应一行数据;嵌套字段会被展开为普通列值,避免DataFrame中出现多层嵌套结构。
内容的提问来源于stack exchange,提问作者Matthew Durand
相关产品推荐
相关产品推荐

