我有一个像这样的简单嵌套列表:
allFrame= [{'statValues': {'kpi2': 2, 'kpi1': 1}, 'modelName': 'first'},{'statValues': {'kpi2': 4, 'kpi1': 2}, 'modelName': 'second'}, {'statValues': {'kpi2': 3, 'kpi1': 3}, 'modelName': 'third'}]
a pd.DataFrame(allFrame)
或 pd.DataFrame.from_dict(allFrame)
两者都不起作用,只返回
我怎样才能接收 kpi_X 作为列名?
我找到了Python dict to DataFrame Pandas做类似的事情。不过我相信这个操作应该更简单
最佳答案
看来您需要先扁平化这些命令。
首先在列表上应用展平函数:
def flatten_dict(d, prefix='__'):
def items():
# A clojure for recursively extracting dict like values
for key, value in d.items():
if isinstance(value, dict):
for sub_key, sub_value in flatten_dict(value).items():
# Key name should imply nested origin of the dict,
# so we use a default prefix of __ instead of _ or .
yield key + prefix + sub_key, sub_value
else:
yield key, value
return dict(items())
另请注意 orient=records 的使用,这意味着列表中的每个字典都是数据框中的一行。
所以:
l = list(map(flatten_dict, allFrame))
df = pd.DataFrame.from_dict(l, orient='records')
关于python - Pandas 将字典嵌套到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39678854/