我有一个字典列表列表,希望将其转换为数据框,但似乎无法使代码正常工作。
当前,这是我的示例列表
eglist = [[{'var1': False, 'name_id': 23, 'team': 0 , 'order':0},
{'var1': False, 'name_id': 24, 'team': 0 , 'order':1},
{'var1': False, 'name_id': 1, 'team': 0 , 'order':2}],
[{'var1': False, 'name_id': 23, 'team': 0 , 'order':0},
{'var1': False, 'name_id': 24, 'team': 0 , 'order':1},
{'var1': False, 'name_id': 1, 'team': 0 , 'order':2}]]
较大的列表包含大约9000个字典列表。
我希望将其转换为
dfframe =
Order 0 Order 1 Order 2
0 var1 name_id team var1 name_id team var1 name_id team
False 23 0 False 24 0 False 1 0
1 var1 name_id team var1 name_id team var1 name_id team`
False 23 0 False 24 0 False 1 0
任何帮助都会很棒!我是一个初学者,因此不确定如何进行。
这是我删除的帖子的无关代码的重新发布。
答案 0 :(得分:2)
您可以按照以下步骤操作:
collections.defaultdict
通过order
键聚合数据。pd.concat
上使用axis=1
转换为单个数据帧。pd.MultiIndex
向列添加级别。这是一个演示:
from collections import defaultdict
# aggregate data by order
d = defaultdict(list)
for L in eglist:
for row in L:
d[row['order']].append([row['var1'], row['name_id'], row['team']])
# convert to dataframe
df = pd.concat([pd.DataFrame(v, columns=[f'{k}_var1', f'{k}_name_id', f'{k}_team'])
for k, v in d.items()], axis=1)
# convert columns to MultiIndex
headers = [('Order '+col.split('_')[0], col.split('_')[-1]) for col in df.columns]
df.columns = pd.MultiIndex.from_tuples(headers, names=['Team', 'Data'])
print(df)
Team Order 0 Order 1 Order 2
Data var1 id team var1 id team var1 id team
0 False 23 0 False 24 0 False 1 0
1 False 23 0 False 24 0 False 1 0