从嵌套字典到python数据帧

从嵌套字典到python数据帧,python,python-3.x,json-normalize,Python,Python 3.x,Json Normalize,我有一个嵌套字典的示例,如下所示: data = [{ 'resultInfo': { 'load': None, 'unload': { 'weight': 59.0, 'unit': 'ton', 'tonsPerTeu': None, 'tonsPerFeu': None,

我有一个嵌套字典的示例,如下所示:

data =  [{
         'resultInfo': {
             'load': None,
             'unload': {
                 'weight': 59.0,
                 'unit': 'ton',
                 'tonsPerTeu': None,
                 'tonsPerFeu': None,
                 'freightId': None,
                 'showEmissionsAtResponse': True
             },
             'location': 'zip:63937',
             'freightId': None,
             'emissionPercentage': 1.0,
             'directDistance': 767.71
         },
         'emissions': {
             'primaryEnergy': {
                 'rail': None,
                 'sea': None,
                 'air': None,
                 'inlandWaterways': None,
                 'road': {
                     '_value_1': Decimal('70351.631210000000'),
                     'wellToTank': Decimal('13412'),
                     'tankToWheel': Decimal('56939')
                 },
                 'logisticsite': None,
                 'transfer': None,
                 'unit': 'MegaJoule'
             },
             'carbonDioxide': {
                 'rail': None,
                 'sea': None,
                 'air': None,
                 'inlandWaterways': None,
                 'road': {
                     '_value_1': Decimal('4.866239643000'),
                     'wellToTank': Decimal('0.902'),
                     'tankToWheel': Decimal('3.963')
                 }
    }]
类型(数据)
是一个列表

我希望它采用数据帧格式,以便预期输出是:

primaryEnergy_wellToTank    primaryEnergy_tankToWheel   carbonDioxide_wellToTank    carbonDioxide_tankToWheel
                   13412                        56939                      0.902                        3.963
我尝试了pd.Dataframe函数的一些转换:

df = pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in mydict.items() ]))df = pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in mydict.items() ]))
但到目前为止,结果并不是很成功

如何做到这一点

下面是我使用
df=pd.json\u normalize(data)

---------------------------------------------------------------------------
KeyError回溯(最近一次呼叫最后一次)
~\AppData\Local\Continuum\anaconda3\lib\site packages\zeep\xsd\valueobjects.py在\uuuuu getattribute\uuuuu中(self,key)
142尝试:
-->143返回自身值\uuuuuu[键]
144除键错误外:
KeyError:“值”
在处理上述异常期间,发生了另一个异常:
AttributeError回溯(最近一次呼叫上次)
在里面
---->1 df=pd.json\u规范化(result.result)
~\AppData\Roaming\Python\Python37\site packages\pandas\io\json\\\\\\\\\\\\\\ json\\ normalize中的.py(数据、记录路径、元、元前缀、记录前缀、错误、sep、最大级别)
272
273如果记录路径为“无”:
-->274如果有([isinstance(x,dict)代表y中的x。values()]代表y中的数据):
275#朴素规范化,这对于平面记录是幂等的
276#并有可能使数据大幅膨胀
(.0)中的~\AppData\Roaming\Python\Python37\site packages\pandas\io\json\\u normalize.py
272
273如果记录路径为“无”:
-->274如果有([isinstance(x,dict)代表y中的x。values()]代表y中的数据):
275#朴素规范化,这对于平面记录是幂等的
276#并有可能使数据大幅膨胀
~\AppData\Local\Continuum\anaconda3\lib\site packages\zeep\xsd\valueobjects.py在\uuuuu getattribute\uuuuu中(self,key)
144除键错误外:
145提高属性错误(
-->146“%s”实例没有属性“%s”。(self.\u class.\u.\u name.\u,key)
147             )
148
AttributeError:DistributionLoadResult实例没有属性“值”
  • 我可以通过使用
    serialize\u object
    函数来解决这个问题
      • 如果
        列表
        看起来像这篇文章底部的
        目录列表
        ,其中重复了
        resultInfo
        ,那么您可以使用
      • 创建
        df
        后,用
      将熊猫作为pd导入
      df=pd.json\u规范化(数据)
      #显示(df)
      resultInfo.load resultInfo.unload.weight resultInfo.unload.unit resultInfo.unload.tonsPerTeu resultInfo.unload.tonsPerFeu resultInfo.unload.freightId resultInfo.unload.showEmissionsAtResponse resultInfo.location resultInfo.freightId resultInfo.EmissionResultInfo.directDistance emissions.primaryEnergy.rail emissions.primaryEnergy.sea排放量。一次能源。空气排放量。一次能源。内陆水道排放量。一次能源。道路。排放量。一次能源。道路。油井排放量。一次能源。道路。油罐车排放量。一次能源。物流站点排放量。一次能源。转移排放量。一次能源。单位排放量。二氧化碳。铁路排放量。二氧化碳。海洋排放物。二氧化碳。空气排放物。二氧化碳。内陆水道排放物。二氧化碳。道路。_值_1排放物。二氧化碳。道路。油井排放物。二氧化碳。道路。油罐车
      0无59.0吨无真拉链:63937无1.0 767.71无无无无70351.63121 13412 5693无无无无兆焦耳无无无4.86624 0.902 3.96
      1无59.0吨无真拉链:63937无1.0 767.71无无无无70351.63121 13412 5693无无无无兆焦耳无无无4.86624 0.902 3.96
      2无59.0吨无真拉链:63937无1.0 767.71无无无70351.63121 13412 5693无无
      
      ---------------------------------------------------------------------------
      KeyError                                  Traceback (most recent call last)
      ~\AppData\Local\Continuum\anaconda3\lib\site-packages\zeep\xsd\valueobjects.py in __getattribute__(self, key)
          142         try:
      --> 143             return self.__values__[key]
          144         except KeyError:
      
      KeyError: 'values'
      
      During handling of the above exception, another exception occurred:
      
      AttributeError                            Traceback (most recent call last)
      <ipython-input-180-cc2694b5448e> in <module>
      ----> 1 df = pd.json_normalize(result.result)
      
      ~\AppData\Roaming\Python\Python37\site-packages\pandas\io\json\_normalize.py in _json_normalize(data, record_path, meta, meta_prefix, record_prefix, errors, sep, max_level)
          272 
          273     if record_path is None:
      --> 274         if any([isinstance(x, dict) for x in y.values()] for y in data):
          275             # naive normalization, this is idempotent for flat records
          276             # and potentially will inflate the data considerably for
      
      ~\AppData\Roaming\Python\Python37\site-packages\pandas\io\json\_normalize.py in <genexpr>(.0)
          272 
          273     if record_path is None:
      --> 274         if any([isinstance(x, dict) for x in y.values()] for y in data):
          275             # naive normalization, this is idempotent for flat records
          276             # and potentially will inflate the data considerably for
      
      ~\AppData\Local\Continuum\anaconda3\lib\site-packages\zeep\xsd\valueobjects.py in __getattribute__(self, key)
          144         except KeyError:
          145             raise AttributeError(
      --> 146                 "%s instance has no attribute '%s'" % (self.__class__.__name__, key)
          147             )
          148 
      
      AttributeError: DistributionLoadResult instance has no attribute 'values'