Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何规范化嵌套dict和list的列表_Python_Pandas_Json Normalize - Fatal编程技术网

Python 如何规范化嵌套dict和list的列表

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,我尝试使用
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