【问题标题】:Remove outer array from JSON in Python dataframe从 Python 数据框中的 JSON 中删除外部数组
【发布时间】:2021-12-16 08:53:21
【问题描述】:

我正在使用以下代码从 API JSON 创建 Excel 文件:

import requests

import pandas as pd

df = pd.read_json("my API url")


df.to_excel("myFileLocation.xlsx")

问题是我的 JSON 无法正确解析,因为 API 中有一个外部数组(我已经通过手动更改 JSON 以删除“外部数组”进行测试,并且它可以正确解析):

{"outer array": [{"Header1": "Value1", "Header2": Value2},{"Header1": "Value3", "Header 2": Value 4}]}

如何更新现有代码以删除此外部数组?

【问题讨论】:

  • 我不清楚你真正想要什么数据。您想消除[ 之前的所有内容吗?似乎没有内部数组。
  • pd.DataFrame(d["outer array"]) if d 是您粘贴的字典。
  • @codebling 是的,如果我的 JSON 以 [{"Header1"... 开头,那么它可以正确解析。所以我需要删除 {"outer array": 和关闭 }
  • @not_speshal 我不明白你的意思。我应该在哪里插入那段代码,d 是什么?
  • 我是新手,你必须更具体。你能粘贴我需要的确切代码吗?

标签: python arrays json dataframe api


【解决方案1】:

在将数据传递给 Pandas 之前,您需要进行一些操作,不幸的是,这意味着您需要自己从 URL 中检索数据。

您可以将其作为字符串操作来执行,或者将其解析为字典并访问该值。使用字符串操作:

import requests

response = requests.get("my API url")
df = pd.read_json(response.text.removeprefix('{"outer array": ').removesuffix('}'))

您可能需要安装 Requests:

python -m pip install requests

【讨论】:

  • 我收到错误:AttributeError: 'HTTPResponse' object has no attribute 'removeprefix'
  • 我的错,对不起!一秒钟
【解决方案2】:

假设你的URL返回的json如下:

d = '{"outer array": [{"Header1": "Value1", "Header2": "Value2"}, {"Header1": "Value3", "Header2": "Value4"}]}'

你可以在调用pd.DataFrame之前简单地解析这个json

import requests
import json
import pandas as pd

d = requests.get("http://my/api/url/").json()
df = pd.DataFrame(json.loads(d)["outer array"]) #if d is a string
#df = pd.DataFrame(d["outer array"]) #uncomment if d is not a string

>>> df
  Header1 Header2
0  Value1  Value2
1  Value3  Value4

【讨论】:

  • 我输入的网址不是“d”吗?
  • @Bob - 否。将您的 URL 返回的 json 保存到 d。查看编辑。
  • 我收到一个错误:TypeError:JSON 对象必须是 str、bytes 或 bytearray,而不是 dict。我发布的 JSON 开头没有 "
  • 那就试试df = pd.DataFrame(d["outer array"])
  • 成功了,谢谢!
猜你喜欢
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 2018-04-02
  • 2017-12-31
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
相关资源
最近更新 更多