You need to enable JavaScript to run this app. Pandas的DataFrame调用to_dict后再用from_dict重建会丢失列顺序吗?
优惠活动
大模型
产品
解决方案
定价
更多

Pandas的DataFrame调用to_dict后再用from_dict重建会丢失列顺序吗?

DataFrame to_dict 后重建的列顺序问题解答

当我调用to_dict方法时,它会返回普通字典,而普通字典并不保留键的顺序,该字典的键对应DataFrame的列。那么如果我先对一个DataFrame调用to_dict,后续再调用from_dict重建DataFrame,是否有可能出现列顺序丢失的情况?

核心结论

是否会丢失列顺序完全取决于你使用的Python和pandas版本,不同场景表现不同:

  • 适配有序字典的新版本环境:如果你使用 Python 3.7及以上版本 + pandas 0.23.0及以上版本,不会出现列顺序丢失问题。Python 3.7开始官方将普通字典的插入顺序设为固定语言特性,对应版本的pandas也适配了该逻辑,调用to_dict返回的普通字典会严格保留原DataFrame的列顺序,后续调用from_dict重建时也会按照字典的键顺序恢复列。
    补充说明:Python 3.6的CPython实现已经支持字典插入有序,但该特性未被纳入官方标准,因此该版本下不保证100%有序。
  • 旧版本环境:如果你使用 Python 3.6及以下版本,或者低于0.23.0的旧版pandas,大概率会出现列顺序丢失。这一阶段Python普通字典不保证键顺序,to_dict返回的字典键会被打乱,重建后的DataFrame列顺序自然和原表不一致。

跨版本通用保序方案

如果需要兼容所有运行环境、绝对保证列顺序不变,可以通过显式指定列名的方式实现:

  1. 转换前先保存原DataFrame的列名列表:original_cols = df.columns.tolist()
  2. 重建DataFrame时主动传入columns参数:new_df = pd.DataFrame.from_dict(df_dict, columns=original_cols)

注意:如果在to_dict获取字典后,你对字典本身做了新增、删除键或者手动调整键顺序的操作,无论版本如何,重建的DataFrame列顺序都会跟随修改后的字典变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 01:45:06