python - JSON(嵌套)对象到 Pandas Dataframe
问题描述
我一直在尝试将嵌套的 JSON 对象展平为 pandas 数据框。我尝试了多种方法,但似乎仍然找不到有效的解决方案。
Json 链接在这里:https ://www.predictit.org/api/marketdata/all/
Pandas.read_json 输出如下所示:
1 {'id': 1, 'name': '马克·库班会竞选...
2 {'id': 1, 'name': 'Andrew Cuomo 会不会跑...
3 {'id': 2901, 'name': 'Will a woman be elected ...
4 {'id': 2902, 'name': '2020 年民主党...
我希望它具有 ID、名称等作为 pandas 数据框中的列。
我知道这是一个相当基本的问题,但我遇到了障碍,希望能得到任何帮助。
谢谢你。
附录:
这是我正在使用的代码位:
这工作正常:
http = urllib3.PoolManager()
r = http.request('GET', 'https://www.predictit.org/api/marketdata/all/')
然后,我尝试了以下方法:
df_data = pandas.json_normalize(r.data)
#I've tried about a dozen different variations playing the variables passed but always get the same result or the same result transposed into a very large column and 1 row.
df_data = pandas.read_json(r.data)
#again, same is true for trying a ton of variable combinations
df_data = pandas.read_json(r.data)
df_dat = df_data.drop('markets') #and
df_dat = df_data.drop([markets])
我现在正在考虑使用 json 库导入 json 对象,然后转储到 CSV 中,如果问题仍然存在,则手动删除第一个 Column 和 Row,然后重新导入它。
如果我可以提供任何其他信息,请告诉我。
解决方案
您应该markets
像这样获得 dict 的值(并且无需使用read_json
):
import pandas as pd
import requests
pd.set_option('display.max_columns', 5)
pd.set_option('display.width', 260)
pd.set_option('mode.use_inf_as_na', True)
proxy = {"http": "http://127.0.0.1:1080", "https": "https://127.0.0.1:1080"}
r = requests.get('https://www.predictit.org/api/marketdata/all/', proxies=proxy, verify=False)
df = pd.DataFrame(r.json()['markets'])
print(df.head())
id name ... timeStamp status
0 2721 Which party will win the 2020 U.S. presidentia... ... 2020-03-18T22:23:43.4549039 Open
1 2747 Will Mark Cuban run for president in 2020? ... 2020-03-18T22:23:43.4549039 Open
2 2875 Will Andrew Cuomo run for president in 2020? ... 2020-03-18T22:23:43.4549039 Open
3 2901 Will a woman be elected U.S. president in 2020? ... 2020-03-18T22:23:43.4549039 Open
4 2902 Will the 2020 Democratic nominee for president... ... 2020-03-18T22:23:43.4549039 Open
[5 rows x 8 columns]
并且列contracts
是嵌套的,您可以使用 dfapply
打开它。
推荐阅读
- javascript - 为什么我的 routeValues 变量在我的视图加载和我单击 ASP.NET MVC 中的 Html.ActionLink 之间发生变化?
- python - python-pptx 如何使图例显示系列名称而不是类别名称
- javascript - 单击时展开表格行
- c# - 在 WPF 中显示一系列图像,然后关闭表单
- python - 按帖子评论排名排序的用户列表
- angular - Bazel 构建 - 服务器执行失败
- c# - 部署更新 api 时如何解决错误请求的 400 错误
- sql - 在oracle sql中向现有json添加新的键值对
- android - 安装新应用时资产文件夹未升级
- kubernetes - kube-apiserver pod 停留在 CreateContainerError 状态