You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效将JSON文件转换为DataFrame?并实现字典格式数据追加

优化JSON转DataFrame与JSON文件追加方案

一、高效JSON转DataFrame实现

你之前用df.append()循环拼接DataFrame的方式确实效率很低——因为pandas的append()每次都会生成全新的DataFrame对象,循环次数多了会产生大量内存开销和重复计算。咱们换两种更高效简洁的实现方式:

方法1:先收集所有数据再一次性生成DataFrame

这种方式先把所有数据整理成字典列表,最后一次性创建DataFrame,避免了循环中重复创建对象的问题,数据量大时速度提升非常明显:

import pandas as pd
import json

def convert_json_file_to_df(file_path):
    with open(file_path, encoding='utf-8') as fh:
        jd = json.load(fh)
    
    data_list = []
    for item in jd:
        # 取出每个字典里的唯一时间键和对应数据
        time_str, stock_data = next(iter(item.items()))
        # 拼接成目标格式的字典
        row_dict = {
            "time": time_str,
            "code": stock_data["code"],
            "current": stock_data["current"],
            "change": stock_data["change"],
            "change rate": stock_data["change rate"],
            "market_cap": stock_data["market_cap"],
            "turnover": stock_data["turnover"],
            "volume": stock_data["volume"]
        }
        data_list.append(row_dict)
    
    # 一次性生成DataFrame,再调整列顺序匹配需求
    df = pd.DataFrame(data_list)
    target_cols = ["time", "code", "current", "change", "change rate", "market_cap", "turnover", "volume"]
    df = df[target_cols]
    return df

方法2:用pd.json_normalize简化代码

如果喜欢更简洁的写法,可以用pandas专门处理嵌套JSON的json_normalize工具:

import pandas as pd
import json

def convert_json_file_to_df(file_path):
    with open(file_path, encoding='utf-8') as fh:
        jd = json.load(fh)
    
    # 先把每个元素的时间字段合并到数据字典里
    normalized_rows = []
    for item in jd:
        time_key = next(iter(item.keys()))
        stock_data = item[time_key]
        stock_data["time"] = time_key
        normalized_rows.append(stock_data)
    
    # 一键生成DataFrame,再调整列顺序
    df = pd.json_normalize(normalized_rows)
    target_cols = ["time", "code", "current", "change", "change rate", "market_cap", "turnover", "volume"]
    df = df[target_cols]
    return df

二、优化字典追加到JSON文件的方法

你原来的代码存在几个小问题:比如用Python关键字dict当参数名、返回值类型不统一、未处理文件不存在的情况。优化后的版本更健壮易用:

import json
import traceback
import sys

def save_dict_to_json_file(data_dict, filepath):
    # 参数校验:确保输入合法
    if not isinstance(data_dict, dict) or not data_dict or not filepath:
        return False, "无效输入:必须传入非空字典和有效文件路径"
    
    try:
        # 处理文件不存在的情况:自动初始化空列表
        try:
            with open(filepath, 'r', encoding='utf-8') as f:
                json_data = json.load(f)
                # 确保读取到的是列表(匹配你的JSON格式)
                if not isinstance(json_data, list):
                    json_data = []
        except FileNotFoundError:
            json_data = []
        
        # 追加字典到列表
        json_data.append(data_dict)
        
        # 写入文件,保留中文格式
        with open(filepath, 'w', encoding='utf-8') as f:
            json.dump(json_data, f, ensure_ascii=False, indent=2)
        
        return True, "追加成功"
    except Exception as e:
        traceback.print_exc()
        error_msg = str(sys.exc_info()[1])
        return False, f"追加失败:{error_msg}"

优化点说明:

  • 将参数名dict改为data_dict,避免与Python内置关键字冲突
  • 统一返回(布尔值, 消息)格式,调用时更容易处理结果
  • 新增文件不存在的处理逻辑,自动初始化空列表,不会抛出异常
  • 去掉了sort_keys=True(如果业务需要可重新添加),避免改变原始数据结构
  • 异常处理更完善,错误信息更清晰直观

内容的提问来源于stack exchange,提问作者shadow dk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:34:54