簡體   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