如何将JSON加载到Pandas数据框中?

13

我正在使用一个 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
    },
  ]
}

谢谢!


1
在将JSON转换为DataFrame之前,只需将其加载到字典中即可。 - Vedang Mehta
谢谢!我该怎么做? - ℕʘʘḆḽḘ
1
你能添加你的样本文件吗?我会发布一个答案。 - Vedang Mehta
1
你能试试这个吗? pd.DataFrame(json['items']) (最好不要把那个字典命名为“json”,因为那是你可能会使用的一个模块名称。) - ayhan
2个回答

10

pd.read_json(json_str)

这里是Pandas文档

编辑:

对于JSON字符串列表,您也可以这样做:

import json
import pandas as pd

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

1
@Noobie 你能分享原始数据吗? - ayhan
1
如果 json 是一个列表,那么你应该对该列表的每个元素使用 read_jsonread_json 的输入应该是一个 str - Lifu Huang
我只有json.load,map函数需要传递哪些参数? - Anagha
3
json_lst 是什么? - Kakaji
@Kakaji,这只是一个json列表,json_lst是一个任意的名称。底部一行代码中的map函数表示将导入的json.loads函数应用于列表中的每个json - plfrick

1

嗯,我认为JSON导入到包含任何字典和列表变化的嵌套中,而Pandas需要一个带有可迭代元素的单个字典集合。因此,如果它们不匹配,您需要进行一些转换。

假设我正确解释了您的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"]

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接