使用 Pandas 从 URL 读取嵌套 JSON

Posted

技术标签:

【中文标题】使用 Pandas 从 URL 读取嵌套 JSON【英文标题】:Read nested JSON from an URL with Pandas 【发布时间】:2019-10-31 15:22:24 【问题描述】:

我知道有一些类似的问题,但似乎没有一个可以帮助我解决我正在尝试做的事情。我正在尝试仅使用“数据”中的信息创建一个 DataFrame

我的 JSON 文件看起来像这样 (complete file)


"data": [
    
    "ID Education Level": 1,
    "Education Level": "Enseñanza Básica",
    "ID Year": 2017,
    "Year": "2017",
    "ID Region": 8,
    "Region": "Biobío",
    "ID Comuna": 298,
    "Comuna": "San Pedro De La Paz",
    "Abandonment Percentage": 0.006858621805241022
    ,
    
    "ID Education Level": 2,
    "Education Level": "Enseñanza Media",
    "ID Year": 2017,
    "Year": "2017",
    "ID Region": 8,
    "Region": "Biobío",
    "ID Comuna": 298,
    "Comuna": "San Pedro De La Paz",
    "Abandonment Percentage": 0.01564914992272025
    ,
    
    "ID Education Level": 1,
    "Education Level": "Enseñanza Básica",
    "ID Year": 2016,
    "Year": "2016",
    "ID Region": 8,
    "Region": "Biobío",
    "ID Comuna": 298,
    "Comuna": "San Pedro De La Paz",
    "Abandonment Percentage": 0.006825490582135591
    
],
"source": [
    
    "measures": [
        "Abandonment Percentage"
    ],
    "annotations": 
        "source_name": "Creciendo con Derechos - Ministerior de Desarrollo Social",
        "source_description": "Sistema de indicadores para el seguimiento de los derechos de niños, niñas y adolescentes, en relación a sus condiciones de vida y en sintonía con la Convención sobre los Derechos del Niño.",
        "source_link": "http://www.creciendoconderechos.gob.cl/indicadores",
        "dataset_name": "mds_abandonment_rate",
        "dataset_link": "https://github.com/datachile/datachile-etl/tree/master/childhood/mds_abandonment_rate",
        "topic": "childhood",
        "subtopic": "abandonment_rate",
        "available_dimensions": "",
        "available_measures": ""
    ,
    "name": "mds_abandonment_rate",
    "substitutions": []
    
]

这就是我想要完成的 DataFrame。

expected dataframe result

我已经阅读了 read_json 文档并看到了一些解决方案,这些解决方案对于我正在尝试做的事情来说可能过于复杂。此外,我需要使用与此类似的 JSON 的 url 数组,因此手动处理它并不是一个真正的选择。

感谢您的任何回复,第一次在这里提问,请原谅我的英语不好。

【问题讨论】:

data = mydict['Data'] 然后 df = pd.DataFrame(data) 【参考方案1】:

如果您想从某个 url 读取 json,则从 requests 库中读取 url 并将其解析为 json 到变量 'data'

import requests
link = 'https://es.datachile.io/api/data?measures=Abandonment%20Percentage&drilldowns=Education%20Level,Year&parents=true&Comuna=298'
resp = requests.get(url=link)
if resp.status_code == 200:
    data = resp.json()

上面提到了其余的解决方案。我希望这会有所帮助。

【讨论】:

【参考方案2】:

这是在图像中生成所需输出的代码

import pandas as pd
import json
with open('data.json') as json_file:
data = json.load(json_file)

df = pd.DataFrame(data['data'])
df.to_csv("output4_9.csv", encoding='utf-8', index='false')

csv 包含它的输出。

以下是将 url 转换为 .json 文件的代码: urllib.request 导入 urlopen 导入json 导入请求

    url = "https://es.datachile.io/api/data?measures=Abandonment%20Percentage&drilldowns=Education%20Level,Year&parents=true&Comuna=298"
    response = urlopen(url)
    data = json.loads(response.read())

    with open('data1.json', 'w') as fw:
        json.dump(data, fw)

【讨论】:

问题是我需要从 url 获取 json,你如何替换 data.json? es.datachile.io/api/…

以上是关于使用 Pandas 从 URL 读取嵌套 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 读取嵌套 JSON 的 KeyError

在 Pandas Dataframe 中读取嵌套的 json 文件

将嵌套对象的JSON转换为Pandas Dataframe

在熊猫数据框中读取嵌套 JSON 时遇到问题

使用 pandas python 将嵌套的 JSON 解析为多个数据帧

如何在熊猫数据框中读取嵌套的 json 文件?