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

pandas保存DataFrame至feather格式丢失object dtype的原因与解决办法

问题原因

Feather格式底层基于Apache Arrow的强类型列式存储规范,本身没有对应pandas通用object dtype的原生实现:

  • pandas的object dtype是万能容器,可存储任意类型的Python对象,没有明确的类型约束
  • 写入Feather时,Arrow会自动推断object列内实际存储的元素类型,用匹配的原生Arrow类型存储以提升效率。你测试用的state列的object容器内全是整数,因此会被自动转为Arrow的int64类型存储,读取时自然还原为pandas的int64 dtype,原本的object标记就丢失了。
规避方案

根据你的需求,有两种成熟方案可选:

方案1:使用pandas专属String类型(最推荐)

将需要保留为字符串的列显式转换为pandas的string dtype,而非用通用object存储,该类型可被Feather完美兼容持久化:

# 写入前转换类型
d["state"] = d["state"].astype("string")
d.to_feather("test.feather")

# 读取后自动保持string类型,无需额外转换
d = pandas.read_feather("test.feather")
print(d.dtypes["state"]) # 输出string

该方案相比通用object类型,存储效率更高,且自带字符串专属方法,类型安全也更好。

方案2:读取时指定dtype(适合必须保留object类型的场景)

如果你的业务逻辑强依赖object dtype,可以在读取时直接指定目标类型,无需后续额外转换:

d = pandas.read_feather("test.feather", dtype={"state": object})
print(d.dtypes["state"]) # 输出object

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:06:04