英国银行假期JSON读入Pandas

时间:2019-03-04 16:08:19

标签: python json pandas

我正在尝试将此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中的所有东方选项,但我仍然没有明智的选择。

由于背后有一个复杂的代理,我不得不将此文件从网站上保存下来,但我认为这不是问题所在。

2 个答案:

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