2016-05-22 60 views
8

我使用的是REST API得到json文件,如下所示:如何将json加载到熊猫数据框中?

import urllib2 
import pandas as pd 
import numpy as np 
import requests 

request='myrequest' 
data= requests.get(request) 
json=data.json() 
df=pd.DataFrame(json) 

和数据框看起来像

           items 
0 {u'access': u'all', u'count': 501, u'time': 2014} 
1 {u'access': u'all', u'count': 381, u'time': 2015} 

我怎样才能改变这种单一的列(看起来像一本字典)做成合适Pandas专栏?

编辑

原始JSON数据看起来像这样

{ 
    "items": [ 
    { 
     "access": "all", 
     "count": 200, 
     "time": 2015 
    }, 
    { 
     "access": "all", 
     "count": 14, 
     "time": 2015 
    }, 
    ] 
} 

谢谢!

+1

只需将JSON加载到字典,然后再将其转换为DataFrame。 –

+0

谢谢!我怎样才能做到这一点? –

+1

你可以添加你的示例文件吗?我会发布一个答案。 –

回答

4

pd.read_json(json_str)

这里是Pandas documentation

编辑:

对JSON海峡的列表中,您也可以只:

import json 
import pandas as pd 

df = pd.DataFrame.from_records(map(json.loads, json_lst)) 
+0

给了我'TypeError:Expected String or Unicode' –

+1

@Noobie你能分享原始数据吗? – ayhan

+1

如果'json'是一个列表,你应该为该列表的每个元素设置'read_json'。 'read_json'的输入应该是'str'。 –

1

嗯,在我看来,JSON进口含类型的字典和列表的任何变化嵌套,而Pandas需要一个带有可迭代元素的单个dict集合。因此,如果它们不匹配,则必须进行一点转换。

假设我正确地解释了JSON的结构(并且我可能没有,因为您只打印最终产品,而不是JSON结构),它看起来像是一个字典列表。如果是这样的话,这里是解决方案:

data = {k:[v] for k,v in json[0].items()} 
for jso in json[1:]: 
    for k,v in jso.items(): 
     data[k].append(v) 

df = pd.DataFrame(data) 

编辑:

提供

价值观,把我的代码工作,你只需要在前面以下:

json = json["items"] 

我认为这应该工作,但它取决于请求如何处理JSON。如果它不起作用,请给我打印输出的json对象。

+0

谢谢!我为你提供了原始的json –

相关问题