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

如何导出大型Pandas DataFrame到JSON且避免高内存占用?

大DataFrame流式导出JSON以降低内存占用

我有一个大型DataFrame,导出为JSON文件后大小约3.5GB。导出过程中发现额外占用了7GB内存,推测Pandas是先将完整的JSON字符串存入内存后再写入文件,而非直接流式生成并写入字节数据;此外写入时还额外占用3.5GB内存用于字符串转字节编码,疑惑为何不采用分块编码方式。

请问是否存在方法可以直接将JSON导出到文件,无需先将完整JSON存入内存,仅使用约10-50MB的缓冲内存即可?

相关代码

from time import sleep
import pandas as pd

large_df: pd.DataFrame
sleep(5)

with open("exported.json", "w") as f:
    large_df.to_json(f, orient="records", date_format="iso")

sleep(5)

内存占用情况

内存占用情况由memory-profiler工具生成,对应内存图谱:
内存占用图谱(单位:MB)


解决方案:分块流式导出JSON

Pandas默认的to_json会先在内存中构建完整的JSON字符串,导致内存暴涨。以下两种方法可实现低内存的流式导出:

方法1:Pandas分块迭代+手动处理JSON格式(适配orient="records")

利用iter_chunks将DataFrame切分为小批量,逐块生成JSON并写入文件,同时手动维护JSON数组的结构:

from time import sleep
import pandas as pd

large_df: pd.DataFrame
sleep(5)

chunk_size = 10000  # 可根据内存调整,对应单块缓冲约10-50MB
with open("exported.json", "w") as f:
    # 写入JSON数组开头
    f.write("[")
    first_chunk = True
    for chunk in large_df.iter_chunks(chunk_size=chunk_size):
        chunk_json = chunk.to_json(orient="records", date_format="iso")
        if not first_chunk:
            # 非首块前添加逗号分隔
            f.write(",")
        # 移除块JSON的外层[],写入片段内容
        f.write(chunk_json[1:-1])
        f.flush()  # 立即刷入磁盘,避免内存缓冲堆积
        first_chunk = False
    # 写入JSON数组结尾
    f.write("]")

sleep(5)

方法2:json模块流式写入(更低内存占用)

用json.JSONWriter逐行处理DataFrame记录,全程仅缓存单条或少量数据:

from time import sleep
import pandas as pd
import json

large_df: pd.DataFrame
sleep(5)

with open("exported.json", "w") as f:
    writer = json.JSONWriter(f)
    writer.write_start_array()
    first_row = True
    for _, row in large_df.iterrows():
        if not first_row:
            writer.write_separator()
        writer.write(row.to_dict())
        first_row = False
    writer.write_end_array()

sleep(5)

核心原理

  • 分块/逐行处理:每次仅加载小部分数据到内存,生成对应JSON片段后立即写入磁盘,避免构建完整的JSON字符串。
  • 手动维护JSON结构:规避Pandas分块导出时的独立数组格式,确保最终输出是合法的JSON数组。
  • 强制刷盘:通过flush()或JSONWriter的流式写入,确保数据及时落地,不占用额外内存缓冲。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:02:06