数据集的字典列表未按顺序排列

时间:2018-05-20 12:33:56

标签: python pandas

我有一个for循环,我正在生成一个dict列表,如下面的

   isv = []
   for obj in hearts:            
       rawvalue = obj.raw - readvalue
       if rawvalue < 0:
           rawvalue = rawvalue + 440
       else:
           rawvalue
       obj = str(obj)
       obj = ((obj.strip('<').split(" ")[0]))
       isv.append({'Plo':obj,'Ots': viewdata(rawvalue)[0][3],'Gts':viewdata(rawvalue)[0][0],'Mts': viewdata(rawvalue)[0][1],'Frts': viewdata(rawvalue)[0][2],'Fin':rawvalue})

我正在从这个dict列表中创建一个数据帧,如下所示

pdadata = pd.DataFrame(isv)

由于某种原因,DF列不按照isv.append中提到的顺序排列为Plo,Ots,Gts,Mts,Frts,Fin 应该怎么做才能使这项工作

示例数据:

Plo Ots     Gts     Mts     Frts    Fin
1   Parcel  Red     Blue    Yellow  678.547
2   Gift    Green   purple  Black   876.214
3   Order   Green   purple  Black   877.217
4   Base    Green   purple  Black   922.145
5   Flat    Green   purple  Black   964.2
6   Deal    Green   purple  Black   400
7   Mission Green   purple  Black   450.124
8   Base    Green   purple  Black   520.2145
9   Flat    Green   purple  Black   570.145
10  Deal    Green   purple  Black   600.178

1 个答案:

答案 0 :(得分:0)

您不应期望pandas将字典视为 ordered 集合,即使在Python 3.6+中,也会在内部为字典保留排序。

如果列顺序很重要,您可以选择几个选项。

在构建数据框后重新排序

只需通过列表重新排列列顺序:

col_list = ['Plo', 'Ots', 'Gts', 'Mts', 'Frts', 'Fin']
pdadata = pdadata[col_list]

使用collections.OrderedDict

您可以将OrderedDict个对象附加到列表中,而不是常规词典。

请注意,这通常通过元组列表实现:

from collections import OrderedDict

isv.append(OrderedDict([('Plo', obj), ('Ots', viewdata(rawvalue)[0][3]),
                        ('Gts', viewdata(rawvalue)[0][0]),
                        ('Mts',  viewdata(rawvalue)[0][1]),
                        ('Frts', viewdata(rawvalue)[0][2]), ('Fin', rawvalue)]))