如何在Pandas中读取嵌套JSON文件的指定字段?
如何从大JSON Lines文件中读取指定嵌套字段到Pandas DataFrame
你的JSON文件属于JSON Lines格式(每行一个独立JSON对象),直接用read_json全量加载会引入大量不需要的字段,浪费内存。针对10万行的规模,推荐两种高效的处理方式:
方法一:逐行解析(内存友好,优先推荐)
通过逐行读取并解析JSON,只提取需要的字段,避免一次性加载全量数据到内存,适合大文件场景:
import pandas as pd import json def extract_target_fields(file_path): with open(file_path, 'r', encoding='utf-8') as file: for line in file: # 跳过空行 if not line.strip(): continue json_obj = json.loads(line) # 用get方法避免字段缺失引发KeyError yield { 'A': json_obj.get('A'), 'C_2': json_obj.get('Metadata', {}).get('Data', {}).get('C', {}).get('C_2') } # 将生成器转换为DataFrame result_df = pd.DataFrame(extract_target_fields('your_json_file.json'))
优势:
- 内存占用极低,仅在处理当前行时加载数据
- 用
dict.get()处理字段缺失的情况,避免程序崩溃 - 处理速度稳定,不会因文件过大出现内存溢出
方法二:全量加载后提取(适合内存充足场景)
如果你的机器内存足够容纳全量数据,可以先读取整个文件,再通过json_normalize展开嵌套字段后筛选目标列:
import pandas as pd from pandas import json_normalize # 读取JSON Lines文件,lines=True指定每行一个JSON对象 full_df = pd.read_json('your_json_file.json', lines=True) # 展开Metadata下的嵌套字段 normalized_metadata = json_normalize(full_df['Metadata']) # 拼接目标字段 result_df = pd.DataFrame({ 'A': full_df['A'], 'C_2': normalized_metadata['Data.C.C_2'] })
注意事项:
- 如果部分JSON行缺失目标字段,结果中会出现
NaN,可后续用fillna()或dropna()处理 - 确保文件编码为UTF-8,若有特殊编码需在
open()或read_json()中指定
内容的提问来源于stack exchange,提问作者Setu Kumar Basak
相关产品推荐
相关产品推荐

