Python -requests POST JSON -форматированная текстовая строка, использующая данные, происходящие из Pandas DataFrame, циклически перебирая записи DataFrame - PullRequest
0 голосов
/ 07 мая 2020

У меня есть базовый c Pandas DataFrame с 3 точками данных (столбцами) на запись. Эти точки данных должны быть отформатированы JSON и отправлены как HTTP-запрос POST с использованием библиотеки запросов, а при запуске кода ему необходимо l oop через каждую запись в DataFrame (10 записей df = 10 запросов POST) . Я могу успешно отправить один запрос, но при использовании l oop ниже появляется сообщение об ошибке: «ValueError: слишком много значений для распаковки (ожидается 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)

Правильно отформатированный JSON Мне нужно отправить запрос POST, который выглядит следующим образом (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"}' и отправлю точно такой же запрос запросов (автономный, за пределами l oop) , запрос выполнен. Включение его в for l oop, как написано выше, вызывает указанную ошибку.

Я искал похожие ошибки, но не смог собрать их вместе. Мой конкретный c вопрос таков: как я могу oop через мой DataFrame отправлять эти запросы в указанном формате JSON? Я открыт для других подходов - мои основные требования c - начать с DataFrame, отправить HTTP POST с специально отформатированным JSON в теле и сделать это столько раз, сколько записей в DataFrame. Извините, но я не могу предоставить полностью воспроизводимый пример (URL / заголовки) из-за защиты конфиденциальности. Я надеюсь, что предоставленной информации достаточно, или что кто-то сталкивался с подобной проблемой в прошлом. Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 08 мая 2020

В случае, если кто-то столкнется с этим, решение было очень простым, как я думал, может быть. Мне нужен оператор continue в конце моего for l oop.

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
...