如何从包含来自多个来源的多个词典的列表中创建数据框

时间:2019-05-06 14:53:33

标签: python list dataframe dictionary data-structures

我有一个列表,其中包含来自多个来源的多个词典。此列表中每个字典的键是source。例如,该列表如下所示:

data = [{'source1': {'time': 1, 'name': 'abc', 'memory': 9.82}},
        {'source1': {'time': 2, 'name': 'def', 'memory': 9.14}},
        {'source2': {'time': 1,'name': 'random1', 'memory': 1.45}},
        {'source2': {'time': 2,'name': 'random2', 'memory': 1.49}}]

上面的列表一次包含来自多个来源的词典以及更多的属性。

我想创建一个数据框架,如下所示:

dataframe

1 个答案:

答案 0 :(得分:1)

我尝试了这里的代码:

import pandas as pd 

data = [{'source1': {'time': 1, 'name': 'abc', 'memory': 9.82}},
        {'source1': {'time': 2, 'name': 'def', 'memory': 9.14}},
        {'source2': {'time': 1,'name': 'random1', 'memory': 1.45}},
        {'source2': {'time': 2,'name': 'random2', 'memory': 1.49}}]


dfs = []

last_source =  next(iter(data[0]))
df = pd.DataFrame()

for i in data : 
        for key, val in i.items() : 

          new_source = key 

          cols = []
          rows = []

          for subkey in val : 
                cols.append(subkey)
                rows.append(val[subkey])          


          if new_source != last_source : 
            last_source = new_source 
            dfs.append(df)
            df = pd.DataFrame([rows],columns=cols)
          else : 
            dft = pd.DataFrame([rows],columns=cols)
            df = df.append(dft)

dfs.append(df)

#print(pd.concat(dfs, axis=1, join='inner'))

print( dfs[0].join(dfs[1].set_index('time'), on='time'))

输出

   time name_source1  memory_source1 name_source2  memory_source2
0     1          abc            9.82      random1            1.45
0     2          def            9.14      random2            1.49