#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
. Чтобы сохранить один и тот же ключ для всех данных