将dicts列表转换为pandas dataframe

时间:2017-07-08 15:31:04

标签: python python-3.x pandas dictionary dataframe

这是我的数据集

enter image description here

我有一个奇怪的,我已经工作了一个星期,现在需要一些帮助。我有一个像这样的词典列表:

[index 0 : {'Total_Salary': 49900.0, 'Total_Value': 490.0, 
 'pers_1': {'value': 71.1, 'Name': 'Bob', 'Salary': 10100, 'nick_name': 'foo'}, 
 'pers_2': {'value': 43.1, 'Name': 'Joe', 'Salary': 9200, 'nick_name': 'bar'}}
 'pers_3': {'value': 42.1, 'Name': 'james', 'Salary': 9750, 'nick_name': 'sam'}}
 'pers_4': {'value': 41.1, 'Name': 'rick', 'Salary': 9700, 'nick_name': 'suzy'}}
 'pers_5': {'value': 23.1, 'Name': 'blop', 'Salary': 9400, 'nick_name': 'jill'}}
 'pers_6': {'value': 54.1, 'Name': 'burp', 'Salary': 9280, 'nick_name': 'yup'}}

索引1 :(将有不同的总薪水,总值数,因为人们会改变,但格式保持与上面相同) ...      index n:' Total_Salary' = ...,' Total_Value' = ...,person_n ...      ]

dicts列表中的每个字典都有一个total_salary和total_value键。它是每个人的总和'薪水'和'价值'在人1前面通过人6。该列表有几百个序列,如上所述。我想循环遍历dicts列表并将每个dict放入一个数据帧。

理想情况下,数据框会以Team 1为索引(然后是team 2team 3等)。

1 个答案:

答案 0 :(得分:0)

import pandas as pd

team = {
    'pers_1': {'value': 71.1, 'Name': 'Bob', 'Salary': 10100, 'nick_name': 'foo'}, 
    'pers_2': {'value': 43.1, 'Name': 'Joe', 'Salary': 9200, 'nick_name': 'bar'},
    'pers_3': {'value': 42.1, 'Name': 'james', 'Salary': 9750, 'nick_name': 'sam'},
    'pers_4': {'value': 41.1, 'Name': 'rick', 'Salary': 9700, 'nick_name': 'suzy'},
    'pers_5': {'value': 23.1, 'Name': 'blop', 'Salary': 9400, 'nick_name': 'jill'},
    'pers_6': {'value': 54.1, 'Name': 'burp', 'Salary': 9280, 'nick_name': 'yup'}}

df = (pd.DataFrame(team)
      .T
      .append(pd.Series({'value': df['value'].sum(),
                         'Salary': df['Salary'].sum()},
                        name='Total'))
      .assign(team='team_1')
      .set_index('team', append=True)
      .swaplevel())

print(df)

结果

                Name  Salary nick_name  value
team                                         
team_1 pers_1    Bob   10100       foo   71.1
       pers_2    Joe    9200       bar   43.1
       pers_3  james    9750       sam   42.1
       pers_4   rick    9700      suzy   41.1
       pers_5   blop    9400      jill   23.1
       pers_6   burp    9280       yup   54.1
       Total     NaN  172290       NaN  823.8

您可以为其他团队执行相同操作,然后连接所有数据框。在混合伪代码中:

all_teams_list = []
# loop for all teams
    # create `df`
    all_teams_list.append(df)
all_teams = pd.concat(all_teams_list)