Разделение одной большой строки через запятую на множество строк после количества значений - PullRequest
0 голосов
/ 28 июня 2018

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

Другими словами, данные, которые у меня есть, выглядят так: (open_time, открытие, максимум, минимум, закрытие, объем, close_time, quotevol, сделки, ignore1, ignore2, ignore3, ... repeat ...)

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

Row1: (open_time, открытый, высокий, низкий, близкий, объем, close_time, quotevol, торгует, ignore1, ignore2, ignore3) Стр2: (open_time2, open2, HIGH2, Low2, close2, volume2, close_time2, quotevol2, trades2, ignore4, ignore5, ignore6)

Row3: ...

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

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

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

  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)

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

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

0 голосов
/ 28 июня 2018

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

Экспорт в CSV

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

...