背景
我有一个复杂的嵌套 JSON 对象,我试图df以一种非常具体的方式将其解压到 pandas 中。
JSON 对象
这是一个摘录,包含 JSON 对象的随机数据,其中显示了 1x 家族(即“Falconer Family”)的层次结构示例(包括子项),但是总共有 100 个,此摘录只有 1x 系列,但是完整的 JSON 对象有多个 -
{\n "meta": {\n "columns": [{\n "key": "value",\n "display_name": "Adjusted Value (No Div, USD)",\n "output_type": "Number",\n "currency": "USD"\n },\n {\n "key": "time_weighted_return",\n "display_name": "Current Quarter TWR (USD)",\n "output_type": "Percent",\n "currency": "USD"\n },\n {\n "key": "time_weighted_return_2",\n "display_name": "YTD TWR (USD)",\n "output_type": "Percent",\n "currency": "USD"\n },\n {\n "key": "_custom_twr_audit_note_911328",\n "display_name": "TWR Audit Note",\n "output_type": "Word"\n }\n ],\n "groupings": …Run Code Online (Sandbox Code Playgroud) 背景:我正在尝试标准化 json 文件,并将其保存到 pandas 数据框中,但是我在导航 json 结构时遇到问题,并且我的代码无法按预期工作。
预期的数据帧输出:给定以下示例json文件(使用随机数据,但格式与真实数据完全相同),这是我试图生成的输出 -
| 新实体组 | 实体ID | 调整后的价值 (2022 年 1 月 31 日,无 Div,美元) |
调整后的 TWR (本季度无 Div,美元)) |
调整后的 TWR (年初至今,无 Div,美元) |
年化调整后 TWR (自成立以来,无 Div,美元) |
成立日期 | 风险目标 |
|---|---|---|---|---|---|---|---|
| 作品集_1 | $260,786 | (44.55%) | (44.55%) | (44.55%) * | 2021 年 4 月 7 日 | 不适用 | |
| FW Irrev 家族Tr | 9552252 | $260,786 | 0.00% | 0.00% | 0.00% * | 2022 年 1 月 11 日 | 不适用 |
| 作品集_2 | $18,396,664 美元 | (5.78%) | (5.78%) | (5.47%) * | 2021 年 9 月 3 日 | 生长 … |
给定以下 pandas DataFrame -
| json_path | 报告组 | 实体/分组 | 实体ID | 调整后价值(今日,无 Div,美元) | 调整后的 TWR(本季度,无 Div,美元) | 调整后的 TWR(年初至今,无 Div,美元) | 年化调整后 TWR(自成立以来,无 Div,美元) | 调整值(无 Div,美元) | TWR审计记录 |
|---|---|---|---|---|---|---|---|---|---|
| data.attributes.total.children.[0].children.[0].children.[0] | 兵营家庭 | 威廉和鲁珀特·信托 | 9957007 | -1.44 | -1.44 | ||||
| data.attributes.total.children.[0].children.[0].children.[0].children.[0] | 兵营家庭 | 现金 | - | -1.44 | -1.44 | ||||
| data.attributes.total.children.[0].children.[0].children.[1] | 兵营家庭 | 格拉蒂亚控股第二有限责任公司 | 8413655 | 55491732.66 | -0.971018847 | -0.971018847 | 11.52490309 | 55491732.66 | |
| data.attributes.total.children.[0].children.[0].children.[1].children.[0] | 兵营家庭 | 投资级固定收益 | - | 18469768.6 | 18469768.6 | ||||
| data.attributes.total.children.[0].children.[0].children.[1].children.[1] | 兵营家庭 | 高收益固定收益 | - | 3668982.44 | -0.205356545 | -0.205356545 | 4.441190127 | 3668982.44 |
我尝试仅保存包含 4 次出现的.children.[]以下语句的行 -
代码: perf_by_entity_df = df[df['json_path'].str.contains(r'(\.children\.\[\d+\]){4}')]
但是收到以下信息:
错误:UserWarning: This pattern is interpreted as a regular expression, and …
问题:
测试二进制响应的 API 响应的最简单方法是什么?
上下文:
我有一个函数可以对某些数据进行 API 调用。该 API 调用的响应 ( api_response) 可以是 JSON 或二进制。如果是 JSON,并且如果它包含percent_complete,则数据尚未准备好,我的函数使用percent_completekey:pair 值来更新用户的进度条。
如果响应是 JSON 且包含meta,则我的数据已准备就绪并已作为 JSON 对象返回。
如果响应是二进制的,那么我的数据也已准备好,但已作为.xlsx[二进制]返回。这是数据未准备好时的响应,您将看到percent_complete用于进度条 -
{
"data": {
"id": "2768510",
"type": "jobs",
"attributes": {
"job_type": "PORTFOLIO_VIEW_RESULTS",
"started_at": "2022-04-14T16:19:21Z",
"parameters": {
"end_date": "2022-04-14",
"output_type": "json",
"view_id": 304078,
"portfolio_id": 1,
"portfolio_type": "firm",
"start_date": "2022-04-14"
},
"percent_complete": 0.0,
"status": "In Progress"
},
"relationships": {
"creator": {
"links": {
"self": "/v1/jobs/2768510/relationships/creator",
"related": "/v1/jobs/2768510/creator"
}, …Run Code Online (Sandbox Code Playgroud)