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

如何在Python中将DataFrame的两列转换为OrderedDict?

保持原始顺序遍历日期键值对的解决方案

你的问题核心是普通字典无法保留原始行顺序,而你之前用set_index后转字典的方式,会按索引排序而非原始行顺序输出。以下是几种可行的解决方法:

方法一:直接遍历DataFrame行(最可靠)

无需将数据转为字典,直接遍历DataFrame的原始行,完全保留数据输入顺序:

import pandas as pd

data = [
    ("2022-12-15", "2022-12-18"),
    ("2022-12-19", "2022-12-21"),
    ("2022-12-22", "2022-12-24"),
    ("2022-12-26", "2022-12-27"),
    ("2022-12-29", "2022-12-30"),
    ("2022-12-02", "2022-12-04"),
    ("2022-12-06", "2022-12-07"),
    ("2022-12-07", "2022-12-08"),
    ("2022-12-13", "2022-12-14"),
    ("2023-01-01", "2023-01-03"),
]

df = spark.createDataFrame(data).toDF(*('startDate', 'endDate')).toPandas()

# 遍历原始行,保持输入顺序
for _, row in df.iterrows():
    print(f'startDate is {row["startDate"]} and corresponding endDate is {row["endDate"]}.')

方法二:使用OrderedDict构建有序字典

如果你确实需要字典结构,可以用collections.OrderedDict来强制保留插入顺序:

from collections import OrderedDict
import pandas as pd

data = [
    ("2022-12-15", "2022-12-18"),
    ("2022-12-19", "2022-12-21"),
    ("2022-12-22", "2022-12-24"),
    ("2022-12-26", "2022-12-27"),
    ("2022-12-29", "2022-12-30"),
    ("2022-12-02", "2022-12-04"),
    ("2022-12-06", "2022-12-07"),
    ("2022-12-07", "2022-12-08"),
    ("2022-12-13", "2022-12-14"),
    ("2023-01-01", "2023-01-03"),
]

df = spark.createDataFrame(data).toDF(*('startDate', 'endDate')).toPandas()

# 按原始行顺序构建OrderedDict
ordered_dict = OrderedDict(zip(df['startDate'], df['endDate']))

for k, v in ordered_dict.items():
    print(f'startDate is {k} and corresponding endDate is {v}.')

方法三:利用Python 3.7+的字典插入有序特性

Python 3.7及以上版本的普通字典默认保留插入顺序,直接通过zip按原始行顺序构建字典即可:

import pandas as pd

data = [
    ("2022-12-15", "2022-12-18"),
    ("2022-12-19", "2022-12-21"),
    ("2022-12-22", "2022-12-24"),
    ("2022-12-26", "2022-12-27"),
    ("2022-12-29", "2022-12-30"),
    ("2022-12-02", "2022-12-04"),
    ("2022-12-06", "2022-12-07"),
    ("2022-12-07", "2022-12-08"),
    ("2022-12-13", "2022-12-14"),
    ("2023-01-01", "2023-01-03"),
]

df = spark.createDataFrame(data).toDF(*('startDate', 'endDate')).toPandas()

# Python3.7+ 字典自动保留插入顺序
dictTest = dict(zip(df['startDate'], df['endDate']))

for k, v in dictTest.items():
    print(f'startDate is {k} and corresponding endDate is {v}.')

为什么原代码会丢失顺序?

你之前用df.set_index('startDate')['endDate'].to_dict()时,set_index会将startDate设为索引,pandas转换字典时会按索引的排序顺序输出,而非原始数据的行顺序,因此导致顺序混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:00:58