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

关于Parquet将DataFrame中的元组转换为列表的技术咨询

Parquet读写DataFrame时元组转为列表:设计而非Bug

这是设计使然,并非Bug,原因如下:

  • Parquet是跨语言的列式存储格式,它依赖的Arrow类型规范里没有专门对应Python元组的类型。元组作为Python特有的不可变序列,会被自动转换为Arrow的列表类型(可变序列)来适配格式要求,读取时自然还原为列表。
  • 列表和字典能正常还原,是因为Arrow有对应的列表、结构体类型,可与pandas的类型直接映射匹配。
  • Pickle是Python专属序列化工具,会完整保留对象的原生类型信息,所以能准确读写元组。

验证代码

import pandas as pd

df = pd.DataFrame([[(0,1)]], columns=['tuple'])
print("原DataFrame及元素类型:")
print(df)
print(f"元组列元素类型:{type(df['tuple'].iloc[0])}")

df.to_parquet('t')
df2 = pd.read_parquet('t', engine='pyarrow')
print("\n读取后的DataFrame及元素类型:")
print(df2)
print(f"读取后列元素类型:{type(df2['tuple'].iloc[0])}")

保留元组类型的处理方法

  • 读取后手动转换列元素类型:
    df2['tuple'] = df2['tuple'].apply(tuple)
    
  • 若需长期存储元组结构,要么用Pickle(注意跨语言兼容性差),要么将元组拆分为独立列(更贴合Parquet的列式存储设计)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:20:13