Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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将带有列表列表的json数据转换为数据帧_Python_Pandas - Fatal编程技术网

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

如何使用python将带有列表列表的json数据转换为数据帧,python,pandas,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"

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中的
字典

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']}
由于您只选择了
日期
键的第一列,因此可以筛选此键:

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']}
如果要根据
数据设置
结束
开始
,只需:

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

你有没有提到我现在提到的这个,但它没有达到我的预期