【问题标题】:Pandas DataFrame Rest Call on each row每行的 Pandas DataFrame Rest Call
【发布时间】:2020-03-24 09:32:52
【问题描述】:

我的 Pandas 数据框有一百万行。我必须在每一行的一个函数内调用一个 rest API 调用,并且需要捕获响应。每个休息呼叫平均需要 2 秒的时间。但是我尝试的以下情况很慢

案例一:申请

def predict(x):
     res = request("XYZ")
     return res.json()

df['response_value'] = df.apply(lambda x:predict(x['request_filed']),axis=1) 

案例 2:向量化而不是应用

def predict(x):
     l = []
     for each in x
         l.append(request("XYZ"))
     return l

df['response_value'] = predict(df['request_filed'] 

案例 3:并行应用

def predict(x):
     res = request("XYZ")
     return res.json()

df['response_value'] = df.parallel_apply(lambda x:predict(x['request_filed']),axis=1) 

他们有什么更好的方法来加快这个过程吗?

【问题讨论】:

  • 你解决了吗?

标签: python pandas multithreading


【解决方案1】:

它不能快于每次 API 调用所花费的累积时间。所以我的建议是先做这些:

responses = [request(x).json() for x in df['request_filed'].values]

然后将它们添加到您的 df:

df['response_value'] = responses

这将非常快。这似乎是您将获得的最快速度。

【讨论】:

  • 我不确定那里的操作顺序,您可以使用打印语句对其进行测试。这样您就可以控制事情发生的时间。
猜你喜欢
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 2019-10-18
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多