如何将json加载到pandas数据帧中?

时间:2016-05-22 12:49:01

标签: python json rest pandas

我使用REST API获取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
    },
  ]
}

谢谢!

2 个答案:

答案 0 :(得分:7)

pd.read_json(json_str)

这是Pandas documentation

<强> 编辑:

有关json str的列表,您也可以:

import json
import pandas as pd

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

答案 1 :(得分:1)

好吧,在我看来,JSON导入嵌套包含dicts和list的任何变体,而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对象无法正常工作,请给我打印输出。