【问题标题】:Dynamically store the API data动态存储 API 数据
【发布时间】:2022-01-26 04:49:17
【问题描述】:

我必须从 API 中提取数据并返回包含所需信息的报告。 例如:

request_data = {'url1 : https://abcd.com','url2 : https://dfgh.com','url3 : https://hjkl.com',column : (name,Ecode,salary,status)}

x1 =  '{ "name":"John", "age":30, "city":"New York"}'

x2 = '{ "name":"John", "age":30, "Ecode":"4567"}'

x3 = '{ "name":"John", "salary":30k, "Status":"Yes"}'

这里的 request_data 是我通过消息队列收到的 get 请求,x1,x2,x3 是我们在从 python 运行 get 请求后获得的值。获得数据后,我将其转换为 pandas 数据框并使用 pandas 数据框合并创建一个新的数据框。

但获取请求中的 url 数量不会是 3。应该是 2,5,1 等等。所以我们不能明确地将变量命名为 x1,x2,x3 作为存储数据的变量。

我想让代码更加动态,以便我们从消息队列中获得任意数量的 url 请求,我们需要从这些 url 中获取数据并创建一个包含所需列的新数据框。

有人可以在这里帮助我或指向一些参考链接。

【问题讨论】:

  • 您可以创建一个包含多个数据框的数组。遍历所有响应,创建一个新的 df 并将其附加到主列表。

标签: python json pandas api


【解决方案1】:

您可以先创建一个名为cumulative_df 的空数据框,您可以在其中收集不同API 调用的响应。

然后,遍历 URL 列表;在循环中,对于每个 URL:

  1. 进行 API 调用(例如,通过使用请求库)。
  2. 将 JSON 响应转换为数据帧(例如,使用 pandas.json_normalize
  3. 将 json_normalize 创建的数据框添加到cumulative_df(例如,使用pandas.concat

这可以对列表中任意数量的 URL 进行。

编辑:如果无法连接/附加数据帧,您可以使用计数器来命名变量并将数据帧分配给循环内的变量。起初,'x'+str(i) 将产生 x1。然后将计数器加 1,循环的下一个实例将创建 x2,依此类推。

【讨论】:

  • 感谢您的回复。就我而言,我不能简单地附加数据。我必须使用合并。例如:第三个 url 数据可能有 50 个条目,而第一个 url 只有 20 个条目。现在我只需要在我的最终数据框中获取 20 个条目,并且只需要为我们从第一个 url 获得的那 20 个条目选择来自第三个 url 的数据。基本上就是我们在sql中做的join。
  • 在这种情况下,在循环之前初始化一个计数器。然后,在循环内部,通过连接文件名和计数器,将每个数据帧分配给一个新变量。例如,如果计数器是 i,文件名是 x,则使用 'x'+str(i)。然后,将计数器加 1。
  • 您能否分享一个示例代码。就像如果我想将数据保存为 df1,df2,df3 等等.. 我该如何实现?
  • @SampathShanbhag,您能否说明您正在尝试自动化流程的哪一部分(例如,API 调用、数据框合并)?当您有两个或五个项目时,您的数据是什么样的?你期望什么输出?
  • 我创建了一个新问题。请参考这个stackoverflow.com/questions/70502408/…
猜你喜欢
  • 2012-08-29
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2012-01-31
  • 1970-01-01
相关资源
最近更新 更多