2014-03-25 89 views
0

我有一个(用户定义的)对象列表,称为“仪器测量”。这些标题可通过Instrument_Measurement.name访问,也可通过Instrument_Measurement.data(这两种用户定义的方法)访问一系列数据。从未知数量的系列熊猫创建数据帧

这些“仪器测量”对象是名为list_instr_objects的列表中的项目。项目数量(“仪器测量”)更改/不能进行硬编码。

我需要为每个“仪器测量”创建一个带有列标题Instrument_Measurement.name的数据框,并为那个“仪器测量”创建一个Instrument_Measurement.data该列的数据。

我试图通过创建这些对象的字典,然后转换,为一个数据帧要做到这一点:

from collections import defaultdict 
testdict = defaultdict(list) 

for i in range(len(list_instr_objects)): 
    testdict[list_instr_objects[i].name].append(list_instr_objects[i].data) 

这不工作,虽然,只为每个仪器的第一数据输入保持并以看似随机的顺序出现。我认为这是因为我将一个系列传递给字典,我应该通过一个列表,但我不知道如何去做/如何解决这个问题。

有什么想法?

非常感谢提前。

+1

列肯定会以任意顺序(因为字典没有命令):这是一个问题吗?另一个问题是你不想将它追加到列表中,你只需要将它设置为'testdict [list_instr_objects [i] .name] = list_instr_objects [i] .data'(并且它不必是一个defaultdict,只是一个字典) –

+0

不幸的是,在使用一个字典而不是附加到列表后,我仍然得到只有第一个元素的相同问题。不幸的是,我确实需要保存命令,所以我会查看一个基于非字典的方法。非常感谢。 – vbastrangledpython

回答

1

我想你可以使用OrderedDict来保持顺序并使用下面的代码来生成数据框。

import pandas as pd 
from collections import OrderedDict 

testdict = OrderedDict() 

for i in range(len(list_instr_objects)): 
    testdict[list_instr_objects[i].name] = (list_instr_objects[i].data) 

combined_data = pd.DataFrame(testdict) 
+0

完美的作品,非常感谢! – vbastrangledpython