【问题标题】:Create Dataframe from unknown number of Series pandas从未知数量的系列熊猫创建数据框
【发布时间】:2014-03-25 19:18:14
【问题描述】:

我有一个(用户定义的)对象列表,称为“仪器测量”。这些,有一个标题,Instrument_Measurement.name 可以访问,一系列数据可以Instrument_Measurement.data 访问(都是用户定义的方法)。

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

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

我试图通过创建这些对象的字典然后将其转换为 Dataframe 来做到这一点:

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)

但这不起作用,只保留每个仪器的第一个数据条目,并且条目以看似随机的顺序出现。我认为这是因为我将一个系列传递给我应该传递一个列表的字典,但我想不出还有什么办法/如何解决这个问题。

有什么想法吗?

非常感谢。

【问题讨论】:

  • 列的顺序肯定是任意的(因为字典没有顺序):有问题吗?另一个问题是您不想将其附加到列表中,您只想将其设置为 testdict[list_instr_objects[i].name] = list_instr_objects[i].data (并且它不必是默认字典,只需字典)
  • 不幸的是,在仅使用字典而不附加到列表之后,我仍然遇到只有第一个元素的问题。不幸的是,我确实需要保留订单,因此我将研究一种非基于字典的方法。非常感谢。

标签: python pandas series


【解决方案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)

【讨论】:

    猜你喜欢
    • 2018-02-26
    • 2015-02-15
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多