Разделение одной большой строки через запятую на множество строк после количества значений

0

Я новичок в MySQL, так что извиняюсь, если это интуитивная проблема, я не мог найти ничего слишком полезного в stackoverflow. В настоящее время у меня довольно много финансовых данных в одной строке, каждое значение разделяется запятой. 12 значений равны одному набору данных, поэтому я хочу создать новую строку после каждых 12 значений.

Другими словами, данные, которые у меня есть, выглядят следующим образом: (open_time, open, high, low, close, volume, close_time, quotevol, trades, ignore1, ignore2, ignore3,... repeat...)

И я хотел бы, чтобы это выглядело так:

Row1: (open_time, open, high, low, close, volume, close_time, quotevol, trades, ignore1, ignore2, ignore3) Row2: (open_time2, open2, high2, low2, close2, volume2, close_time2, quotevol2, trades2, ignore4, ignore5, ignore6)

Row3:...

Данные уже являются.sql файлом, и я тоже получаю его в таблице, если это имеет значение. Чтобы уточнить, таблица, в которой она находится, имеет только одну строку и один столбец.

Теги:
stock-data

2 ответа

0

Если я правильно понял, вы хотите сделать следующее:

  1. Получить строку из базы данных, которая находится в первой строке первого столбца в результатах запроса
  2. Разбить строку на "строки" с 12 значениями длиной
  3. Уметь использовать эти данные

То, как я буду заниматься этим в Python, это:

  1. Создание соединения mysql и курсора
  2. Выполните запрос, чтобы вытащить данные из базы данных
  3. Поместите данные из одной ячейки в строку
  4. Разделите строку в каждой запятой и добавьте эти значения в список
  5. Разбейте этот список на куски по 12 элементов каждый
  6. Поместите эти данные в табличную форму для удобного использования

Код:

import mysql
import pandas as pd 
query = '''this is your sql statement that returns everything into the first row of the first column in your query results'''
cnx = mysql.connector.connect('''enter relevant connection information here: user, password, host, and database''')
mycursor = cnx.cursor()
mycursor.execute(query)
tup = tuple(mycursor.fetchall()[0])
text = str(tup[0])
ls = text.split(',') # converts text into list of items
n = 12
rows = [ls[i:i + n] for i in range(0, len(ls), n)]
data = []
for row in rows:
    data.append(tuple(row))
labels = ['open_time','open','high','low','close','volume','close_time','quotevol','trades','ignore1','ignore2','ignore3']
df = pd.DataFrame.from_records(data, columns=labels)
print(df)

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

Без фактической строки или набора данных я не могу подтвердить, что это работает полностью. Сможете ли вы дать нам минимальный, полный и проверенный пример?

  • 0
    спасибо за код, я сделаю все возможное, чтобы получить все MCV. Ссылка на источник кода не работает для меня, если вы не против опубликовать его снова.
  • 0
    @MikeyMike исправил ссылку на источник
0

Я не сомневаюсь, что есть способ сделать это в MySQL, но я бы подошел к нему, экспортировав запись как.CSV.

Экспорт в CSV

Напишите простой скрипт python с использованием модуля CSV и сдвиньте каждое x число полей в новую строку, используя запятую в качестве разделителя. После этого вы можете повторно импортировать его обратно в MySQL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню