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

Posted

技术标签:

【中文标题】如何将 json 加载到 pandas 数据框中?【英文标题】:how to load a json into a pandas dataframe? 【发布时间】:2016-09-19 08:45:05 【问题描述】:

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

谢谢!

【问题讨论】:

只需将 JSON 加载到字典中,然后再将其转换为 DataFrame。 谢谢!我该怎么做? 您可以添加您的示例文件吗?我会发布一个答案。 你能试试这个吗? pd.DataFrame(json['items'])(最好不要将该字典命名为“json”,因为它是您可能使用的模块名称。) 【参考方案1】:

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))

【讨论】:

@Noobie 你能分享原始数据吗? 如果json 是一个列表,您应该为该列表的每个元素read_jsonread_json 的输入应该是str 我只有json.load,map函数要传递的参数是什么? 什么是json_lst @Kakaji 它只是jsons 的列表,json_lst 是任意名称。底部单行中的map 表示将导入的json.loads 函数应用于列表中的每个json【参考方案2】:

嗯,在我看来,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"]

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

【讨论】:

以上是关于如何将 json 加载到 pandas 数据框中?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除单引号,并在转换为to_json后将括号添加到pandas数据框中?

在 Pandas 数据框中提取嵌入为字符串的嵌套 JSON

将不同类型的 CSV 字符串加载到 Pandas 数据框中,拆分列,解析日期

如何将字符串中带有双引号的json文件加载到spark scala中的数据框中

如何从 pandas 数据框中的大型每日 JSON 数据集计算平均月值?

将 JSON 时间戳字符串转换为 pandas 数据框中的 python 日期