有几个这样的问题,但问题是我有一本字典词典...而不是字典列表
我正在导入一个像
这样的yaml文件category1:
region1:
effect1:
up: 10
down: 20
effect2:
up: 30
down: 50
...
region2:
effect1:
up: 30
down: 40
...
region3:
...
category2:
region1:
...
使用yaml.load
导入时,我会得到一个像
{'category':
{'region1':
{'effect1':
{'up': 10, 'down': 20},
...
我可以在大熊猫中导入吗?我想要一张带有多索引的平台:
up down
category1 region1 effect1 10 20
category1 region1 effect2 30 50
...
category1 region2 effect1 30 40
...
我想要一个通用解决方案,因为例如我有一些数据缺少region
图层。
答案 0 :(得分:4)
如果您有一个dict来生成数据帧,请使用json_normalize
,然后拆分并展开列,即
di = {'category1': {'region1': {'effect1': {'up': 10, 'down': 20},'effect2': {'up': 12, 'down': 22}}},
'category2':{'region2': {'effect1': {'up': 10, 'down': 20},'effect2': {'up': 12, 'down': 22}}}}
k = pd.io.json.json_normalize(di)
#category1.region1.effect1.down category1.region1.effect1.up category1.region1.effect2.down category1.region1.effect2.up ...
#0 20 10 22 12 ...
k.columns = k.columns.str.split('.', expand=True)
# Transpose and unstack the dataframe for getting the actual dataframe
main_df = k.T.unstack()[0]
输出:
down up
category1 region1 effect1 20 10
effect2 22 12
category2 region2 effect1 20 10
effect2 22 12
或等同物:
k = pd.io.json.json_normalize(di).T
k.index = k.index.str.split('.',expand=True)
mdf = k.unstack()[0]