如何在Pandas中直接读取行存储嵌套JSON文件 无需借助外部转换库
Pandas 直接读取嵌套JSON Lines文件的实现方法
你手里的文件属于JSON Lines格式,特点就是每行存储一个独立的JSON对象,Pandas的read_json原生支持这种格式,不需要额外第三方库,你之前没实现是忽略了lines参数,具体操作如下:
方法1:分步骤读取+拆分嵌套字段
先读取原始数据,再手动展开嵌套的ssh字段:
import pandas as pd # 读取JSON Lines文件,指定lines=True即可识别每行一个JSON的格式 df = pd.read_json("你的文件路径.json", lines=True) # 拆分嵌套在data字段中的ssh相关属性 df["ssh_status"] = df["data"].map(lambda x: x["ssh"]["status"]) df["ssh_protocol"] = df["data"].map(lambda x: x["ssh"]["protocol"]) df["ssh_error"] = df["data"].map(lambda x: x["ssh"]["error"]) # 可选:删除不需要的原始嵌套data列 df = df.drop(columns=["data"])
方法2:用json_normalize一键展开嵌套字段
如果嵌套层级多、字段多,可以用json_normalize自动展开所有嵌套字段,不需要手动逐个写字段名:
import pandas as pd import json # 逐行读取文件加载为JSON对象列表 with open("你的文件路径.json", "r", encoding="utf-8") as f: json_list = [json.loads(line.strip()) for line in f if line.strip()] # 自动展开所有嵌套层级,生成扁平化的DataFrame df = pd.json_normalize(json_list)
用这个方法读出来的列名会自动按层级命名,比如data.ssh.status、data.ssh.protocol,你可以按需重命名列。
内容的提问来源于stack exchange,提问作者Sahan Randika
相关产品推荐
相关产品推荐

