我正在尝试将此JSON文件读入熊猫,但我无法正确读取它:
https://www.gov.uk/bank-holidays.json
我尝试使用json_normalize进行更改,并首先使用标准python库将其作为文件打开,更改为dict并将其作为dict读入熊猫。
这就是我现在得到的:
body content_id description divisions.england-and-wales.2012 divisions.england-and-wales.2013 divisions.england-and-wales.2014 divisions.england-and-wales.2015 divisions.england-and-wales.2016 divisions.england-and-wales.2017 divisions.england-and-wales.2018 ... divisions.scotland.2015 divisions.scotland.2016 divisions.scotland.2017 divisions.scotland.2018 divisions.scotland.2019 divisions.scotland.2020 divisions.scotland.slug divisions.scotland.title need_id title
0 58f79dbd-e57f-4ab2-ae96-96df5767d1b2 bank_holidays.calendar.description [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.new_year', 'date': '... ... [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.2nd_january', 'date'... [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.new_year', 'date': '... [{'title': 'bank_holidays.new_year', 'date': '... common.nations.scotland_slug common.nations.scotland 100128 bank_holidays.calendar.title
有人能帮忙吗?
我已经尝试了Pandas中的所有东方选项,但我仍然没有明智的选择。
由于背后有一个复杂的代理,我不得不将此文件从网站上保存下来,但我认为这不是问题所在。
答案 0 :(得分:2)
由于您已经说过已经设法将链接的JSON加载到字典中,因此我将跳过该步骤,这意味着我的代码以已经存储在字典d
中的所有数据开始。
要将其存储为明智的格式,我建议遍历三个不同国家/地区的三个子字典,为每个国家/地区创建一个DataFrame,然后最终使用pd.concat
将三个DataFrame串联起来:
import pandas as pd
dfs = []
for country, data in d.items():
df = pd.DataFrame(data['events'])
df['Country'] = country
dfs.append(df)
final = pd.concat(dfs, ignore_index=True)
答案 1 :(得分:1)
您可以只是from_dict
import requests
import lxml
from lxml import html
import pandas as pd
import json
url = "https://www.gov.uk/bank-holidays.json"
r = requests.get(url)
d = r.json()
df = pd.DataFrame.from_dict(d)
print(df)