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

带多级索引的空DataFrame存为Parquet后pd.read_parquet读取报错如何解决

问题根因

该报错属于低版本pyarrow与pandas的已知兼容问题:使用df.loc[[], []]同时将行、列裁剪为空时,MultiIndex列的类型元信息在转换为pyarrow表的过程中会丢失正常结构,被识别为dict类型,pandas读取时无法解析该结构就会抛出AttributeError: 'dict' object has no attribute 'dtype'。

解决方案

1. 使用head(0)生成空表(最优雅)

df.head(0)是pandas官方推荐的生成保留完整索引/列结构空表的方法,不管是普通索引还是MultiIndex都可以完整保留元信息,无需手动使用loc裁剪:

# 替换原有 df = df.loc[[], []]
df = df.head(0)

后续读写parquet的逻辑无需修改,不会触发报错。

2. 调整读数据逻辑

如果不想修改写数据侧的代码,可以调整读数据的逻辑规避兼容问题:

# 替换原有 pd.read_parquet('my_table.parquet')
df = pq.read_table('my_table.parquet').to_pandas()

3. 升级依赖版本(根本解决)

该兼容问题已在pandas 1.5.0+、pyarrow 10.0.0及以上版本修复,直接升级依赖包即可无需修改任何业务代码:

pip install --upgrade pandas pyarrow

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:39:00