【发布时间】:2021-10-23 17:05:27
【问题描述】:
我正在尝试使用 pandas 解析此 JSON 并收到此特定错误:
{
"tables": [
{
"name": "PrimaryResult",
"columns": [
{
"name": "ApiId",
"type": "string"
},
{
"name": "count_",
"type": "long"
}
],
"rows": [
[
"test 1",
654321
],
[
"test 2",
32564
],
[
"test 3",
185262
]
]
}
]
}
analytics_data = response_analytics.text
json_dict = json.loads(analytics_data)
df = pd.DataFrame.from_dict(json_dict["tables"])
cols_to_keep = ["ApiId", "count_"]
df_final = df[cols_to_keep]
df_final = df_final.rename(columns={"ApiId": "API Name", "count_": "Total requests"})
print(
tabulate(
df_final, showindex=False, headers=df_final, tablefmt="psql", numalign="left"
)
)
错误:
Traceback(最近一次通话最后一次):
文件“C:\Users\test\te.py”,第 93 行,在 df_final = df[cols_to_keep]
文件“C:\Users\test\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pandas\core\frame.py”,第 3461 行,在获取项目 indexer = self.loc._get_listlike_indexer(key, axis=1)1
文件“C:\Users\test\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pandas\core\indexing.py”,第 1314 行,在_get_listlike_indexer self._validate_read_indexer(keyarr, indexer, axis)
文件“C:\Users\test\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pandas\core\indexing.py”,第 1374 行,在validate_read_indexer raise KeyError(f"[{key}] 中没有 [{axis_name}]") KeyError:“[Index(['ApiId', 'count'], dtype='object')] 中没有一个在 [columns] 中”
我的目标是创造这样的东西:
API Name Total requests
---------------------------------- ---------------------
test 1 654321
test 2 32564
test 3 185262
如何将此 JSON 模式转换为表?使用 REST API 导出数据
打印结果:
print(tabulate(df, showindex=False, headers=df, tablefmt='psql', numalign="left"))
【问题讨论】:
-
json_dict = json.loads(text_data)应该是text_data还是analytics_data? -
应该是
analytics_date。更新了代码和错误。谢谢@Owenn -
您可以尝试使用
df.columns查看数据框中存在的列名,您可以使用rename()将这些列重命名为您想要的列。 -
这看起来不像一个有效的 JSON。 “rows”键中的 3 个列表项应包含在父列表中。
-
@Amir 在这种情况下,以这种方式创建 DataFrame 是否适合您 -
df = pd.DataFrame(data=json_dict["tables"][0]["rows"], columns=[r["name"] for r in json_dict["tables"][0]["columns"]])?