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列顺序自然和原表不一致。
跨版本通用保序方案
如果需要兼容所有运行环境、绝对保证列顺序不变,可以通过显式指定列名的方式实现:
- 转换前先保存原DataFrame的列名列表:
original_cols = df.columns.tolist() - 重建DataFrame时主动传入
columns参数:new_df = pd.DataFrame.from_dict(df_dict, columns=original_cols)
注意:如果在
to_dict获取字典后,你对字典本身做了新增、删除键或者手动调整键顺序的操作,无论版本如何,重建的DataFrame列顺序都会跟随修改后的字典变化。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

