Как вы просматриваете фрейм данных и преобразуете строки в объекты JSON

#python #json #pandas #dataframe

Вопрос:

Я создаю функцию, которая отправляет данные на удаленный сервер. В настоящее время я использую библиотеку pandas для чтения CSV-файла и преобразования данных в фрейм данных. Что мне нужно сделать, так это просмотреть этот фрейм данных, скрыть каждую строку в JSON и отправить их в мою базу данных.

Причина, по которой мне нужно перебирать, заключается в том, что наборы данных, которые слишком велики (в настоящее время отправляют 100 строк по 21 столбцу), слишком длинны для HTML-строк. Что мне нужно сделать, так это отправить цикл и отправить много 10 или около того.

Ниже показано, где я нахожусь в данный момент:

 def UploadData(root, self, data):  i = 0  data_arr = []  for row in data:  if i % 5 == 0:  # Add row to array or something  data_arr.append(row)  json_str = data_arr.to_json(orient='records')  url = 'https://newsimland.com/~db/JSON/?tok={"tok":"YOUR TOKEN HERE","cmd":{"STORE":"test_database","VALUE":'  json_str  '}}'  r = requests.get(url)  else:  # Add row to array  data_arr.append(row)  i  = 1  data = r.json()  if r.status_code == 200:  Alert(title="Error", text="Data upload unsuccessful")  else:  Alert(title="Success", text="Data upload successful")  

Одна из проблем с этим заключается в том, что .to_json(orient='records') это предназначено для фрейма данных, а не для массива, к которому я добавляю. Кроме того, если исходный кадр данных содержит менее 5 строк, он не будет отправлять данные в базу данных.

Кто-нибудь знает, как я мог бы этого добиться?

Ответ №1:

Если я вас правильно понимаю, вы хотите отправить свой фрейм данных частями по 5 или менее строк. В этом случае я рекомендую вам разделить фрейм данных следующим образом, чтобы строки сохранялись как фрейм данных и вы могли их использовать to_json .

 import numpy as np  def UploadData(root, self, data):  size = 5  for chunk in np.split(data, np.arange(size, data.size, size)):  if chunk.size:  json_str = chunk.to_json(orient='records')  # Send your data here!