Сложное преобразование бесконечного списка в фрейм данных

#python #list #dataframe #types #data-conversion

Вопрос:

Список содержит содержимое в следующем формате :

 [{'m': {'name': 'esl',  'type': 'FS',  'env': 'C1',  'service': 'None',  'ins': '1'},  'value': [17, 'NaN']},  {'m': {'name': 'esl',  'type': 'FS',  'env': 'C1',  'service': 'CBA',  'instance': '10'},  'value': [147, 'NaN']},  {'m': {'name': 'esl',  'type': 'FS',  'env': 'C1',  'service': 'CBA',  'instance': '12'},  'value': [16, 'NaN']}]  

В списке n элементов

требуется преобразование списка в фрейм данных, желаемый вывод должен содержать следующие имена столбцов — имя, тип, env, служба, ins, значение

Комментарии:

1. что вы подразумеваете под «бесконечным списком»? Я отредактировал данные вашего примера, чтобы они действительно компилировались и были более удобочитаемыми.

2. Можете ли вы дать точный соответствующий результат, который вы ожидаете? Как вы справляетесь с тем, что "value" ключ-это список второго размера? Меняется ли это число? Даже если это всегда 2, как это должно быть представлено в фрейме данных?

Ответ №1:

Структура очень беспорядочная, и там есть противоречивые ключи. Поэтому приведенный ниже код может решить вашу проблему,

 import pandas as pd   mainList = [{'m': {'name': 'esl',  'type': 'FS',  'env': 'C1',  'service': 'None',  'instance': '1'},  'value': [17, 'NaN']},  {'m': {'name': 'esl',  'type': 'FS',  'env': 'C1',  'service': 'CBA',  'instance': '10'},  'value': [147, 'NaN']},  {'m': {'name': 'esl',  'type': 'FS',  'env': 'C1',  'service': 'CBA',  'instance': '12'},  'value': [16, 'NaN']}]  dfColumns = list(mainList[0]['m'].keys()) dfColumns.append('value')  mainDict = {} for i in dfColumns:  mainDict.update({i:[]})  for i in mainList:  for key,value in i['m'].items():  mainDict[key].append(value)  mainDict['value'].append(i['value'])  df = pd.DataFrame(mainDict)  

выход DataFrame будет

 name type env service instance value 0 esl FS C1 None 1 [17, NaN] 1 esl FS C1 CBA 10 [147, NaN] 2 esl FS C1 CBA 12 [16, NaN]   

Примечание: Я исправил один из ваших первых элементов на instance от ins . Чтобы сохранить один и тот же ключ для всех данных