我有一个列表messages
的消息,当这个列表中的每个消息,是一个有5个项目的对象 - name, message, action, date, location
。我想用这些信息填充我的数据框。
目前,我这样做如下:
j = 1
df = pd.DataFrame(index=range(1, len(messages)+1), columns=['name','message','action','date', 'location'])
for message in messages:
df.ix[j]['name'] = message.name
df.ix[j]['message'] = message.message
df.ix[j]['action'] = message.action
df.ix[j]['date'] = message.date
df.ix[j]['location'] = message.location
j += 1
我觉得索引不是我能想到的最好的解决方案。还有其他办法吗?也许没有使用df.ix[j]
几次。
我认为更好的是创建元组列表然后DataFrame
构造函数:
dfs = [(m.name, m.message, m.action, m.date, m.location) for m in messages]
df = pd.DataFrame(dfs,
index=range(1, len(messages)+1),
columns=['name','message','action','date', 'location'])
您还可以使用嵌套的理解。这允许您集中选择属性/列。
cols = ['name', 'message', 'action', 'date', 'location']
lst = [tuple(getattr(m, col) for col in cols) for m in messages]
df = pd.DataFrame(lst, index=range(1, len(messages)+1), columns=cols)