我有一个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
答案 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)]))