如何高效将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
相关产品推荐
相关产品推荐

