2 votes

Comment créer un Dataframe à partir d'une liste contenant plusieurs dictionnaires provenant de plusieurs sources ?

J'ai une liste contenant plusieurs dictionnaires provenant de plusieurs sources. La clé de chaque dictionnaire à l'intérieur de cette liste est l'élément source . Par exemple, la liste ressemble à ce qui suit :

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}}]

La liste ci-dessus contient des dictionnaires provenant de plusieurs sources à la fois et de nombreux autres attributs.

Je souhaite créer un cadre de données qui ressemble à ce qui suit :

dataframe

1voto

nassim Points 1297

J'ai essayé ce que j'ai pu, voici le code :

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'))

SORTIE

   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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X