如何使用python将带有列表列表的json数据转换为数据帧
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。数据是列表的列表,其中每个列表包含两个参数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
你有没有提到我现在提到的这个,但它没有达到我的预期