首页 > 解决方案 > 从 json 文件中获取 pandas 数据框

问题描述

我想展平一个 JSON 文件来创建一个 pandas DataFrame。json输出为:

{
  'info': {
    'status': [
      
    ],
    'weightcorp': {
      'weight': 4.0
    }
  },
  'results': [
    {
      'instrument': 'A',
      'ts': [
        {
          'date': '2020-12-10',
          'indicators': {
            'Batch': 'Daily',
            'Price': '313.23653',
            'Date': '2020-12-10'
          }
        }
      ]
    },
    {
      'instrument': 'B',
      'ts': [
        {
          'date': '2020-12-10',
          'indicators': {
            'Batch': 'Weekly',
            'Price': '29.21',
            'Date': '2020-12-10'
          }
        }
      ]
    }
  ]
}

我正在寻找的输出DataFrame如下:

乐器 日期 价格
一个 2020-12-10 日常的 313.23653
2020-12-10 每周 29.21

你能帮我么?

标签: jsonpandaslistdataframedictionary

解决方案


让我们尝试对您的数据使用自定义函数:

def flatten(d):
    '''
    remove all intermediate dictionaries and list
    '''
    ret = dict()
    for k, v in d.items():
        # case when value is a dictionary
        if isinstance(v, dict):
            sub = flatten(v)
            for kk, vv in sub.items():
                ret[kk] = vv

        # case when value is a list
        elif isinstance(v, list):
            for vv in v:
                ret.update(flatten(vv) )    

        # normal key:value pair            
        else: ret[k] = v
    return ret

pd.DataFrame(flatten(v) for v in d['results'])

输出:

  instrument        date   Batch      Price        Date
0          A  2020-12-10   Daily  313.23653  2020-12-10
1          B  2020-12-10  Weekly      29.21  2020-12-10

推荐阅读