Python dict到数据帧的列表未按顺序排列
我有一个for循环,从中生成一个dict列表,如下所示Python dict到数据帧的列表未按顺序排列,python,pandas,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.
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})
由于某些原因,DF列的顺序与isv中提到的不一致。附加为Plo、Ots、Gts、Mts、FRT、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
您不应该期望
pandas
将字典视为一个有序的集合,即使在Python 3.6+中,字典内部保留了顺序
如果列顺序很重要,那么您有几个选项
构建数据表后重新排序
只需通过列表重新排列列顺序:
col_list = ['Plo', 'Ots', 'Gts', 'Mts', 'Frts', 'Fin']
pdadata = pdadata[col_list]
使用集合。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)]))
您能否将您的问题包括在一些数据中,以便我们可以复制您的错误?添加了示例数据我能够使ordereddict选项正常工作,谢谢。我怎么做另一个呢?在通过list@Python_newbie就这样,没别的了。如果您
print(pdadata)
,列将按照col\u list
中的顺序对齐。对不起,这个问题看起来可能不好,pdadata是我存储数据帧的地方,我应该使用相同的变量名吗?我不明白:(这取决于你,如果你想把它存储在同一个变量中,可以使用pdadata=pdadata[col_list]
。这绝对没有错。如果你想存储一个新变量,可以使用pdadata2=pdadata[col_list]
。原理是一样的,要重新排列列,可以使用df[col_list]
。
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)]))