复杂的无限列表到 DataFrame 的转换
Complex Infinite List to DataFrame 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 项
需要一个列表到数据框的转换,所需的输出应具有以下列名称-
名称、类型、环境、服务、ins、值
结构非常混乱,并且存在不一致的键。所以下面的代码可以解决你的问题,
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]
注意:我已将您的第一个元素从 ins
更正为 instance
。为所有数据保留相同的密钥
列表包含以下格式的内容:
[{'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 项
需要一个列表到数据框的转换,所需的输出应具有以下列名称- 名称、类型、环境、服务、ins、值
结构非常混乱,并且存在不一致的键。所以下面的代码可以解决你的问题,
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]
注意:我已将您的第一个元素从 ins
更正为 instance
。为所有数据保留相同的密钥