pandas数据框的python类属性

vom3gejh  于 2023-06-20  发布在  Python
关注(0)|答案(3)|浏览(82)

我想填充一个pandas dataframe从属性的类列表通过'append'生成。(不确定这是否是下面描述'allFoo'的正确术语。

class foo(object):
def __init__(self,input):
    self.val=input
    #in real life, there will be many more attributes in this class
allFoo=[];
for i in range(10):
    allFoo.append(foo(i))

现在我想定义一个新的pandas Dataframe 'df',它从allFoo.瓦尔(而不是任何其他属性)中填充
比如这样:

df[0]=foo[0].val
df[1]=foo[1].val

等等
我来自matlab,在那里我会尝试这样的东西:dataFrame=allFoo[:].瓦尔
如何在python/pandas中实现这一点?

jv4diomz

jv4diomz1#

对于您的“精简”示例,下面的代码可以完成这项工作:

pd.DataFrame([f.val for f in allFoo], columns=['val'])

在一个稍微更一般的情况下,如果您确定可以从对象中获取所有字段值,则以下操作也可以正常工作:

pd.DataFrame([vars(f) for f in allFoo])

在更一般的情况下,当对象可能包含数据框中需要的某些字段和不需要的其他字段时,无法绕过指定此字段列表。下面的代码可能会有所帮助:

fields = ['val', 'other_field']
pd.DataFrame([{fn: getattr(f, fn) for fn in fields} for f in allFoo])

寓意:当你不知道某个东西的“内置方法”时,列表理解是你的第一选择。

w8biq8rn

w8biq8rn2#

另一种选择是使用对象的dict

pd.DataFrame([f.__dict__ for f in allFoo])
igsr9ssn

igsr9ssn3#

正如EdChum在评论中所说:

import pandas as pd
allfoo = [1, 2, 3, 4]
df = pd.DataFrame()
df["val"] = allfoo
print df

产出

val
0    1
1    2
2    3
3    4

相关问题