Python 如何规范化嵌套dict和list的列表
我有下面的输出json,我尝试使用Python 如何规范化嵌套dict和list的列表,python,pandas,json-normalize,Python,Pandas,Json Normalize,我有下面的输出json,我尝试使用json\u normalize将其转换为带有pandas的数据帧。我可以通过json_normalize(数据,['runners'])达到runners级别,但我知道如何达到ex级别 [{ u 'status' : u 'OPEN', u 'isMarketDataDelayed' : False, u 'numberOfRunners' : 9, u 'complete' : True, u 'bspReconcil
json\u normalize
将其转换为带有pandas的数据帧。我可以通过json_normalize(数据,['runners'])
达到runners级别,但我知道如何达到ex级别
[{
u 'status' : u 'OPEN',
u 'isMarketDataDelayed' : False,
u 'numberOfRunners' : 9,
u 'complete' : True,
u 'bspReconciled' : False,
u 'runnersVoidable' : False,
u 'betDelay' : 0,
u 'marketId' : u '1.123264244',
u 'crossMatching' : False,
u 'totalMatched' : 4.22,
u 'version' : 1241856317,
u 'lastMatchTime' : u '2016-02-25T10:32:25.704Z',
u 'numberOfWinners' : 1,
u 'inplay' : False,
u 'numberOfActiveRunners' : 9,
u 'totalAvailable' : 39.26,
u 'runners' : [{
u 'status' : u 'ACTIVE',
u 'handicap' : 0.0,
u 'selectionId' : 10861647,
u 'totalMatched' : 0.0,
u 'adjustmentFactor' : 16.631,
u 'ex' : {
u 'availableToBack' : [{
u 'price' : 1.02,
u 'size' : 2.15
}
],
u 'availableToLay' : [],
u 'tradedVolume' : []
}
}, {
u 'status' : u 'ACTIVE',
u 'handicap' : 0.0,
u 'selectionId' : 10861648,
u 'totalMatched' : 0.0,
u 'adjustmentFactor' : 13.237,
u 'ex' : {
u 'availableToBack' : [{
u 'price' : 1.01,
u 'size' : 7.11
}
],
u 'availableToLay' : [],
u 'tradedVolume' : []
}
},
对于其他数据,我可以轻松地使用json\u normalize(数据,['runners','ex'])
来完成它,但是如果我在本例中这样做,我会得到
0
0 availableToBack
1 availableToLay
2 tradedVolume
3 availableToBack
4 availableToLay
5 tradedVolume
6 availableToBack
7 availableToLay
8 tradedVolume
9 availableToBack
10 availableToLay
11 tradedVolume
12 availableToBack
13 availableToLay
14 tradedVolume
15 availableToBack
16 availableToLay
17 tradedVolume
18 availableToBack
19 availableToLay
20 tradedVolume
21 availableToBack
22 availableToLay
23 tradedVolume
24 availableToBack
25 availableToLay
26 tradedVolume
27 availableToBack
28 availableToLay
29 tradedVolume
.. ...
它应该有列'availableToBack'
,'availableToLay'
,'tradedVolume'
是嵌套的数据
和目录
列表
是一个'ex.availableToBack'
中的列表
,这些目录被规范化为目录
和'price'
列'size'
数据
将熊猫作为pd导入
#如果需要所有数据,请将数据加载到数据帧中
df=pd.json\u规范化(数据)
#跑步者是一个需要分解的列表
df=df.explode('runner')。重置索引(drop=True)
#runners是一列需要规范化的dict
runners=pd.json_规范化(df.pop('runners'))
#有许多列是必须分解的列表
流道=流道。应用(pd.Series.explode)
#展平前可用背部
runners=runners.join(pd.DataFrame(runners.pop('ex.availableToBack')).values.tolist())
#为所有列名称添加前缀
runners.columns=[f'runners_{v}表示runners.columns中的v]
#加入df和跑步者
df=df.join(跑步者)
#提取ex列
ex_cols=df.iloc[:,-4::]copy()
#显示(df)
betDelay BSP已核对的完整交叉匹配显示为MarketDataDelayed LastMatch时间市场ID Number of ActiveRunners Number of runners Number of Winners runners可撤销状态总计可用总计匹配版本跑步者\u调整因子跑步者\u障碍跑步者\u选择ID跑步者\u状态跑步者\u总计匹配跑步者\u ex.可用铺设跑步者\u ex.交易量跑步者\u价格跑步者\u尺寸
假假假假假假2016-02-25T10:32:25.704Z 1.1232642449 9 1假开39.26 4.22 1241856317 16.631 0.0 10861647激活0.0楠楠1.02 2.15
1 0 False-True False 2016-02-25T10:32:25.704Z 1.1232642449 9 1假开39.26 4.22 1241856317 13.237 0.0 10861648激活0.0楠楠1.017.11
#显示(ex_cols)
跑步者\u ex.可用铺设跑步者\u ex.交易量跑步者\u价格跑步者\u尺寸
0楠楠1.02 2.15
1楠楠1.01 7.11
在'runner'
#规范化runners键以获得ex
runners=pd.json\u规范化(数据、记录路径=['runners'])
#有许多列是必须分解的列表
跑步者=跑步者。应用(pd.Series.explode)。重置索引(drop=True)
#展平前可用背部
runners=runners.join(pd.DataFrame(runners.pop('ex.availableToBack')).values.tolist())
#提取ex列
ex_cols=runners.iloc[:,-4::]copy()
#展示(跑步者)
调整因素障碍选择ID状态总计匹配出厂价可用出厂价交易量价格大小
0 16.631 0.0 10861647激活0.0 NaN NaN 1.02 2.15
1 13.237 0.0 10861648激活0.0 NaN NaN 1.01 7.11
#显示(ex_cols)
ex.availableToLay ex.tradedVolume价格大小
0楠楠1.02 2.15
1楠楠1.01 7.11
数据
数据=\
[{'betDelay':0,
“已和解”:错误,
“完整”:正确,
“交叉匹配”:False,
“inplay”:错误,
“isMarketDataDelayed”:False,
“lastMatchTime”:“2016-02-25T10:32:25.704Z”,
‘市场化’:‘1.123264244’,
“numberOfActiveRunners”:9,
“NumberOfRunner”:9,
“numberOfWinners”:1,
'runners':[{'adjustmentFactor':16.631,
'ex':{'availableToBack':[{'price':1.02,'size':2.15}],
“availableToLay”:[],
“tradedVolume”:[]},
“障碍”:0.0,
“selectionId”:10861647,
“状态”:“活动”,
“totalMatched”:0.0},
{'adjustmentFactor':13.237,
'ex':{'availableToBack':[{'price':1.01,'size':7.11}],
“availableToLay”:[],
“tradedVolume”:[]},
“障碍”:0.0,
“selectionId”:10861648,
“状态”:“活动”,
“totalMatched”:0.0}],
“Runnersvidable”:False,
“状态”:“打开”,
“totalAvailable”:39.26,
“totalMatched”:4.22,
“版本”:1241856317}]
是嵌套的数据
和目录
列表
是一个'ex.availableToBack'
中的列表
,这些目录被规范化为目录
和'price'
列'size'
数据
将熊猫作为pd导入
#如果需要所有数据,请将数据加载到数据帧中
df=pd.json\u规范化(数据)
#跑步者是一个需要分解的列表
df=df.explode('runner')。重置索引(drop=True)
#runners是一列需要规范化的dict
runners=pd.json_规范化(df.pop('runners'))
#有许多c