使用下面的代码将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
答案 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