pd .__ version__ = 0.18.0
假设您有OrderedDict的列表:
[OrderedDict([('SecurityCode', 'IDX.MSDENON'), ('DescriptionLong', 'MSCI Norway NR USD (EUR)'), ('DataSrc', 'BGN.COB'), ('Ticker', 'MSDENON Index'), ('LastRun', None)])]
如果从默认构造函数构建DataFrame(甚至使用.from_dict()方法)
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问题。它是一个" bug"在默认构造函数中,在任何情况下都会覆盖OrderedDict列顺序。已经为下一个主要版本(接受0.18.2的提交)计划了修正
答案 0 :(得分:1)
这确实是DataFrame构造函数的问题(参见我的编辑) 我觉得columns = option workaround比hhbilly提出的解决方案更好(语法上更容易理解)。
答案 1 :(得分:0)
试试这个:
df = pd.DataFrame.from_dict(data[0], orient='index').T
答案 2 :(得分:0)
滚动您自己的....
newList = list()
columnNames = df.columns
for index, row in df.iterrows():
newDict = OrderedDict()
for key in columnNames:
newDict[key] = row[key]
newList.append(newDict)