【问题标题】:Read nested JSON from an URL with Pandas使用 Pandas 从 URL 读取嵌套 JSON
【发布时间】: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)

标签: python json pandas jupyter-notebook


【解决方案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)
    

    【讨论】:

    猜你喜欢
    • 2019-05-24
    • 2021-05-24
    • 2020-07-29
    • 2020-05-20
    • 2021-06-17
    • 2019-10-01
    • 2015-08-02
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多