如何根据类参数命名dataframe列?

2024-09-28 18:59:36 发布

您现在位置:Python中文网/ 问答频道 /正文

在这上面花了很多时间。我有tuple个不可调用的classes,全部命名为SymbolInfo,具有相同的attribute标签。让我们说:

In: print(my_tuple)
Out: (SymbolInfo(att_1=False, att_2=0, att_3=1.0),SymbolInfo(att_1=True, att_2=0, att_3=1.5))

我的目标是从这个tuple创建一个数据帧。当我将其转换为list时,它可以正常工作:

df = pd.DataFrame(list(my_tuple))

我得到了数据帧,但没有得到列标签,列标签应该是classes{}:(即att_1att_2att_3)的名称

所有classes的属性名称及其数量(不是值)都是标准化的。所以我可以考虑任何{{CD13}}来获得它。

我尝试过像inspect.getmembers(my_tuple[0])inspect.getfullargspec(my_tuple[0]).args这样的方法,但没有成功。重要的是要让这些参数以它们出现的相同顺序出现


Tags: 数据in名称my时间attribute标签命名
3条回答

您可以使用__dict__方法访问属性(按添加顺序),如下所示:

class thing():
    def __init__(self, att_1, att_2, att_3):
        self.z_att_1 = att_1
        self.att_2 = att_2
        self.att_3 = att_3

a = thing('bob', 'eve', 'alice')
b = thing('john', 'jack', 'dan')
c = (a,b)

# see the attributes
print(c[0].__dict__)

结果是

# note that z_att_1 is first
{'z_att_1': 'bob', 'att_2': 'eve', 'att_3': 'alice'}

现在,您可以在字典中循环并提取属性名称的键

只需从类创建dict,然后创建数据帧:

pd.DataFrame(list(map(lambda x: x.__dict__, my_tuple)))

我建议在python中使用面向对象的attrs

得到了这个解决方案:

my_dict = my_tuple[0]._asdict()
my_col_list = list(my_dict.keys())

相关问题 更多 >