Python-requests POST JSON 格式的文本字符串,使用来自 Pandas DataFrame 的数据,循环通过 DataFrame 记录
Posted
技术标签:
【中文标题】Python-requests POST JSON 格式的文本字符串,使用来自 Pandas DataFrame 的数据,循环通过 DataFrame 记录【英文标题】:Python-requests POST JSON-formatted text string using data originating from Pandas DataFrame, looping through DataFrame records 【发布时间】:2020-08-22 05:36:33 【问题描述】:我有一个基本的 Pandas DataFrame,每条记录有 3 个数据点(列)。这些数据点需要采用 JSON 格式并使用 requests 库作为 HTTP POST 请求发送,并且当代码运行时,它需要遍历 DataFrame 中的每条记录(10 个 df 记录 = 10 个 POST 请求)。我能够成功发送单个请求,但是在使用下面的循环时出现错误:“ValueError: too many values to unpack (expected 2).”
import pandas as pd
import requests
import json
d = 'UID': [1111,2222,3333], 'ID':[29,29,30], 'updatedDate':['2020-04-13','2020-04-13','2020-04-13']
df = pd.DataFrame(data=d)
for row in df.itertuples(index=False):
payload = f'"uniqueIds": ["row.UID"], "changes": "style": "id": row.ID, "updatedDate": "row.updatedDate"'
requests.post(url,headers=(custom headers),data=payload)
我需要在 POST 请求中发送的格式正确的 JSON 如下所示(上面的 f 字符串格式正确):
"uniqueIds": ["1111"], "update": "style": "id": 29, "updatedDate": "2020-04-13"
"uniqueIds": ["2222"], "update": "style": "id": 29, "updatedDate": "2020-04-13"
"uniqueIds": ["3333"], "update": "style": "id": 30, "updatedDate": "2020-04-13"
如果我创建一个字符串变量 payload = '"uniqueIds": ["1111"], "update": "style": "id": 29, "updatedDate": "2020-04-13"'
并发送完全相同的请求请求(独立,在 for 循环之外),则请求成功。将它包含在上面写的 for 循环中会导致指定的错误。
我一直在寻找类似的错误,但无法将其拼凑起来。我的具体问题是:如何循环通过我的 DataFrame 以指定的 JSON 格式发送这些请求?我对其他方法持开放态度 - 我的基本要求是从 DataFrame 开始,发送 HTTP POST 并在正文中使用特定格式的 JSON,并根据 DataFrame 中的记录执行多次。抱歉,但由于隐私保护,我无法提供完全可复制的示例(url / headers)。我希望提供的信息足够,或者过去有人遇到过类似的问题。提前感谢您的帮助。
【问题讨论】:
【参考方案1】:如果有人遇到这种情况,解决方案非常简单,就像我想的那样。我需要在我的 for 循环结束时使用 continue
语句。
for row in df.itertuples(index=False):
payload = f'"uniqueIds": ["row.UID"], "changes": "style": "id": row.ID, "updatedDate": "row.updatedDate"'
requests.post(url,headers=(custom headers),data=payload)
continue
【讨论】:
以上是关于Python-requests POST JSON 格式的文本字符串,使用来自 Pandas DataFrame 的数据,循环通过 DataFrame 记录的主要内容,如果未能解决你的问题,请参考以下文章
python-requests 发出 GET 而不是 POST 请求