【问题标题】:Format Json using Pandas DataFrame使用 Pandas DataFrame 格式化 Json
【发布时间】: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"]])

标签: python json pandas


【解决方案1】:

以这种方式创建您的数据框将起作用:

df = pd.DataFrame(
    data=json_dict["tables"][0]["rows"], 
    columns=[r["name"] for r in json_dict["tables"][0]["columns"]]
)

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 2016-11-19
    • 2021-10-16
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2022-08-04
    相关资源
    最近更新 更多