Итерация на Pandas DataFrame для передачи данных в API - PullRequest
0 голосов
/ 03 ноября 2018

Я создаю сценарий, который читает таблицу Google, преобразует данные и передает их в мой ERP API для автоматизации создания заказов на покупку.

Я дошел до вывода данных в кадре данных, но мне нужна помощь в том, как я могу пройти через это и передать их в правильном формате в API.

Пример DataFrame (dfRow):

   productID  vatrateID  amount  price
0      46771          2       1   1.25
1      46771          2       1   2.25
2      46771          2       2   5.00

Форматирование данных API:

              vatrateID1=dfRow.vatrateID[0],
              amount1=dfRow.amount[0],
              price1=dfRow.price[0],
              productID1=dfRow.productID[0],
              vatrateID2=dfRow.vatrateID[1],
              amount2=dfRow.amount[1],
              price2=dfRow.price[1],
              productID2=dfRow.productID[1],
              vatrateID3=dfRow.vatrateID[2],
              amount3=dfRow.amount[2],
              price3=dfRow.price[2],
              productID3=dfRow.productID[2],

Я хотел бы создать функцию, которая выполняла бы итерацию через DataFrame и возвращала данные в правильном формате для передачи в API.

Я новичок в Python и больше всего борюсь с итерациями / циклами, поэтому любая помощь очень ценится!

1 Ответ

0 голосов
/ 03 ноября 2018

Во-первых, вы всегда можете циклически перемещаться по строкам кадра данных, используя df.iterrows(). Каждый шаг в этом итераторе приводит к кортежу, содержащему индекс строки и содержимое строки в виде объекта Серии pandas. Так, например, это бы сработало:

for ix, row in df.iterrows():
    for column in row.index:
       print(f"{column}{ix}={row[column]}")

Вы также можете сделать это, не прибегая к петлям. Это замечательно, если вам нужна производительность, но если производительность не имеет значения, то это действительно вопрос вкуса.

# first, "melt" the data, which puts all of the variables on their own row
x = df.reset_index().melt(id_vars='index')

# now join the columns together to produce the rows that we want
s = x['variable'] + x['index'].map(str) + '=' + x['value'].map(str)

print(s)

0     productID0=46771.0
1     productID1=46771.0
2     productID2=46771.0
3         vatrateID0=2.0
...
10           price1=2.25
11            price2=5.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...