如何从包含来自多个来源的多个字典的列表创建数据帧

2024-04-20 16:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含来自多个来源的多个词典的列表。此列表中每个字典的键都是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


Tags: namesource列表data字典timedef来源
1条回答
网友
1楼 · 发布于 2024-04-20 16:32:53

我试过了我能做的是代码:

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

相关问题 更多 >