转换为数据框时JSON数据无法正确显示

时间:2020-06-10 22:21:07

标签: python json

使用下面的代码将JSON转换为数据框时,它返回900列而不是行。如何才能在行中正确显示它,并具有URL,链接,标签等列?预先感谢!

import requests
import pandas as pd
import json

html = requests.get("https://www.bankofcanada.ca/valet/lists/groups")
json_data = json.loads(html.text)
data_frame = pd.json_normalize(json_data['groups'])
data_frame

2 个答案:

答案 0 :(得分:1)

Pandas可能内置了执行此操作的功能,但有时更容易滚动自己的内容:

records = [{'name': key, **value} for key, value in json_data['groups'].items()]
df = pd.DataFrame.from_records(records)
df

                                name                          label                                               link
0                         sdp-2012-8  Staff Discussion Paper 2012-8  https://www.bankofcanada.ca/valet/groups/sdp-2...
1                        swp-2012-37    Staff Working Paper 2012-37  https://www.bankofcanada.ca/valet/groups/swp-2...
2                        swp-2015-46    Staff Working Paper 2015-46  https://www.bankofcanada.ca/valet/groups/swp-2...
3                        swp-2013-42    Staff Working Paper 2013-42  https://www.bankofcanada.ca/valet/groups/swp-2...
4                         sdp-2014-3  Staff Discussion Paper 2014-3  https://www.bankofcanada.ca/valet/groups/sdp-2...
..                               ...                            ...                                                ...
477  ATABLE_INFLATION_CONTROL_TARGET       Inflation-Control Target  https://www.bankofcanada.ca/valet/groups/ATABL...
478     ATABLE_INFLATIOON_INDICATORS           Inflation Indicators  https://www.bankofcanada.ca/valet/groups/ATABL...
479       ATABLE_MONETARY_CONDITIONS            Monetary Conditions  https://www.bankofcanada.ca/valet/groups/ATABL...
480       ATABLE_MONETARY_AGGREGATES            Monetary Aggregates  https://www.bankofcanada.ca/valet/groups/ATABL...
481         ATABLE_POLICY_INSTRUMENT              Policy Instrument  https://www.bankofcanada.ca/valet/groups/ATABL...

[482 rows x 3 columns]

答案 1 :(得分:1)

您的方向是索引方式,只需转置DataFrame即可获得900行,例如:

data_frame = pd.json_normalize(json_data['groups']).T
data_frame

理想情况下,您想使用read_json(),然后将orient设置为想要的DataFrame。参见https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html#pandas.read_json