【发布时间】:2016-09-25 20:49:32
【问题描述】:
pd.__version__ = 0.18.0
假设您有一个 OrderedDict 的列表:
[OrderedDict([('SecurityCode', 'IDX.MSDENON'), ('DescriptionLong', 'MSCI Norway NR USD (EUR)'), ('DataSrc', 'BGN.COB'), ('Ticker', 'MSDENON Index'), ('LastRun', None)])]
如果您从默认构造函数(甚至使用 .from_dict() 方法)构造 DataFrame
df = pd.DataFrame(mylist)
它不保留列顺序:
DataSrc DescriptionLong LastRun SecurityCode Ticker
0 BGN.COB MSCI Norway NR USD (EUR) None IDX.MSDENON MSDENON Index
而:
df = pd.DataFrame(data, columns=data[0].keys())
SecurityCode DescriptionLong DataSrc Ticker LastRun
0 IDX.MSDENON MSCI Norway NR USD (EUR) BGN.COB MSDENON Index None
确实保持列顺序。
我在 StackOverflow 上读到这样的错误存在于 0.11 中,但恕我直言,我们不应该在默认构造函数中指定 columns= 选项。是我遗漏了什么还是需要报告的错误?
编辑: pydata/pandas repo 上的 github 问题已创建并被接受。这是默认构造函数中的一个“错误”,在任何情况下都会覆盖 OrderedDict 列顺序。已计划对下一个主要版本进行更正(0.18.2 接受提交)
【问题讨论】:
-
在
0.18.1中仍然可以这样工作,您可以更新问题或在 github 上发表评论 -
如果列表中的第二个 OrderedDict 具有不同的顺序,您希望发生什么?让您指定要使用第一个值的顺序是否有意义?
-
那些 OrderedDict 是在 SQL 查询之后创建的,所以 order 是为所有定义一次的
标签: python python-3.x pandas dataframe ordereddictionary