繁体   English   中英

如何使用python pandas将带有列表列表的json数据转换为dataframe

[英]how to convert json data with list of list to dataframe using python pandas

JSON对象
实际上,我需要的是对数据帧的JSON。 数据是列表的列表,其中每个列表都包含两个参数year和其他值。

{
      "series_id": "TOTAL.PAEWPUS.A",
      "name": "Wells Drilled, Exploratory, Crude Oil, Annual",
      "units": "Number of Wells",
      "f": "A",
      "start": "2004",
      "end": "2012",
      "last_updated": "2016-04-25T13:57:43-04:00",
      "data": [
        [
          "2010",
          669
        ],
        [
          "2009",
          605
        ],
        [
          "2008",
          897
        ],
        [
          "2007",
          808
        ],
        [
          "2006",
          646
        ],
        [
          "2005",
          539
        ],
        [
          "2004",
          383
        ],
      ]
    }

如何创建这样的数据框

series_id    start  end   data
TOTAL.PAEWPUS.A 2004 2010  2010
TOTAL.PAEWPUS.A 2004 2010  2009
TOTAL.PAEWPUS.A 2004 2010  2008
TOTAL.PAEWPUS.A 2004 2010  2007
TOTAL.PAEWPUS.A 2004 2010  2006
TOTAL.PAEWPUS.A 2004 2010  2005
TOTAL.PAEWPUS.A 2004 2010  2004

我该如何实现?

您的JSON可以轻松地用Python转换成dictionary

d = { "series_id": "TOTAL.PAEWPUS.A",
      "name": "Wells Drilled, Exploratory, Crude Oil, Annual",
      "units": "Number of Wells",
      "f": "A",
      "start": "2004",
      "end": "2012",
      "last_updated": "2016-04-25T13:57:43-04:00",
      "data": [
               ["2010",669],
               ["2009",605],
               ["2008",897],
               ["2007",808],
               ["2006",646],
               ["2005",539],
               ["2004",383],
              ]
     }

之后,您只能获得所需的密钥:

d = {k : d[k] for k in ['series_id', 'start', 'end', 'data']}

由于您仅是date键的第一列,因此请过滤此键:

d['data'] = [val[0] for val in d['data']]

结果是这样的:

print(d)

{'series_id': 'TOTAL.PAEWPUS.A',
 'start': '2004',
 'end': '2012',
 'data': ['2010', '2009', '2008', '2007', '2006', '2005', '2004']}

如果要根据data设置endstart ,请执行以下操作:

d['end'] = str(max(map(int,d['data'])))
d['start'] = str(min(map(int,d['data'])))

然后,您只需放入一个数据框:

import pandas as pd

df = pd.DataFrame(d)

print(df)

你得到:

   data   end        series_id start
0  2010  2012  TOTAL.PAEWPUS.A  2004
1  2009  2012  TOTAL.PAEWPUS.A  2004
2  2008  2012  TOTAL.PAEWPUS.A  2004
3  2007  2012  TOTAL.PAEWPUS.A  2004
4  2006  2012  TOTAL.PAEWPUS.A  2004
5  2005  2012  TOTAL.PAEWPUS.A  2004
6  2004  2012  TOTAL.PAEWPUS.A  2004

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM