преобразование словаря в фрейм данных Pandas

#python-3.x #pandas

#python-3.x #pandas

Вопрос:

У меня есть словарь, который я хотел бы преобразовать в фрейм данных Pandas. Словарь выглядит так:

 {'629195': {'name': 'Sam',
  'ID': ['.'],
  'feature1': ['C234'],
  'feature2': ['A313','G1283'],
  'feature3': ['129534','1294'],
  'feature4': ['1','3'],
  'feature5': [88,99],
  'feature6':[11,12],
  'score': [9,1,3],
  'feature7': ['XXA', 'XXL', 'XXC']},
 '629196': {'name': 'Peter',
  'ID': ['.'],
  'feature1': ['A139'],
  'feature2': ['.', '.'],
  'feature3': ['.'],
  'feature4': ['.'],
  'feature5': [0],
  'feature6': [],
  'score': ['.'],
  'feature7': ['.']}}

 

Ожидаемый результат:

введите описание изображения здесь

Dictionary — это словарь словарей, где каждый ключ является столбцом в фрейме данных Pandas. Как я могу добиться результата в python? Идеи будут оценены по достоинству.

Ответ №1:

Используйте понимание вложенного словаря для объединения значений в списках и переходите к DataFrame.from_dict :

 d1 = {k:{k1: ','.join(map(str, v1)) if isinstance(v1, list) 
                                    else v1 
                                    for k1, v1 in v.items()} for k, v in d.items()}
df = pd.DataFrame.from_dict(d1, orient='index')
    
print (df)
         name ID feature1    feature2     feature3 feature4 feature5 feature6  
629195    Sam  .     C234  A313,G1283  129534,1294      1,3    88,99    11,12   
629196  Peter  .     A139         .,.            .        .        0            

        score     feature7  
629195  9,1,3  XXA,XXL,XXC  
629196      .            .  
 

Для второго Reg_ID столбца используйте:

 df.insert(1, 'Reg_ID', df.index)
df = df.reset_index(drop=True)
print (df)
    name  Reg_ID ID feature1    feature2     feature3 feature4 feature5  
0    Sam  629195  .     C234  A313,G1283  129534,1294      1,3    88,99   
1  Peter  629196  .     A139         .,.            .        .        0   

  feature6  score     feature7  
0    11,12  9,1,3  XXA,XXL,XXC  
1               .            .