Как создать Dataframe из списка, содержащего несколько словарей из разных источников - PullRequest
2 голосов
/ 06 мая 2019

У меня есть список, содержащий несколько словарей из разных источников.ключ для каждого словаря в этом списке - 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 Ответ

1 голос
/ 06 мая 2019

Я попробовал, что я мог, вот код:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...