使用 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 文件