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

如何快速存储包含列表字段的pandas DataFrame以降低加载耗时?

解决方案

方案1:优先使用Parquet列式二进制存储(推荐)

Parquet是列式二进制存储格式,原生支持嵌套列表类型,不需要做任何序列化/反序列化转换,读写性能远高于CSV,同时压缩率高,占用磁盘空间更小,300万行数据通常1分钟内即可完成加载,完全不需要额外处理列表字段的类型转换。
使用前需安装依赖:pip install pyarrow
代码示例:

  • 存储:df.to_parquet("output.parquet", compression="snappy")
  • 加载:df = pd.read_parquet("output.parquet")

方案2:必须使用CSV时改用分隔符拼接替代序列化

如果因为业务要求必须存CSV格式,不要把列表存为Python字面量,提前把列表元素用罕见分隔符(比如|、\001,确保不会和文本字段内容冲突)拼接为字符串后再存储,加载时直接拆分即可,性能远高于eval转换。
代码示例:

  1. 存储前预处理:df["list_field"] = df["list_field"].str.join("|")
  2. 存CSV:df.to_csv("output.csv", encoding="latin-1", index=False)
  3. 加载后处理:
df = pd.read_csv("output.csv", encoding="latin-1")
df["list_field"] = df["list_field"].str.split("|")

方案3:临时自用场景可直接用Pickle序列化

你之前对Pickle的认知有误,Pickle是Python原生的对象序列化格式,会完整保留DataFrame的所有数据类型,包括列表字段,加载时不需要额外转换,性能也很高。
注意:Pickle存在Python版本、Pandas版本兼容性问题,不适合跨环境共享数据,仅适合自用临时存储。
代码示例:

  • 存储:df.to_pickle("output.pkl")
  • 加载:df = pd.read_pickle("output.pkl")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 23:24:04