在数个值之后将一个大逗号分隔的行拆分为多行

时间:2018-06-28 18:56:08

标签: python mysql stock-data

我对MySQL还是很陌生,所以如果这是一个直观的问题,我深表歉意,在stackoverflow中我找不到任何有用的东西。我目前在一行中有相当数量的财务数据,每个值都用逗号分隔。 12个值等于一组数据,因此我想在每12个值之后创建一个新行。

换句话说,我拥有的数据如下所示: (开盘时间,开盘价,高点,低点,收盘价,成交量,成交时间,quotevol,交易,ignore1,ignore2,ignore3,...重复...)

我希望它看起来像:

行1 :(开盘时间,开盘价,高,低,收盘价,成交量,收盘时间,报价量,交易量,忽略1,忽略2,忽略3) 第2行:(open_time2,open2,high2,low2,close2,volume2,close_time2,quotevol2,trades2,ignore4,ignore5,ignore6)

第3行: ...

数据已经是一个.sql文件,如果有区别,我也将其放在表中。 要澄清的是,它所在的表只有一行和一列。

2 个答案:

答案 0 :(得分:0)

我毫不怀疑在MySQL中可以做到这一点,但是我可以通过将记录导出为.CSV来实现。

Export to CSV

使用CSV模块编写一个简单的python脚本,并使用逗号作为分隔符将每x个字段移至新行。之后,您可以将其重新导入到MySQL中。

答案 1 :(得分: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)

列表理解代码取自this。您没有确切指定所需的结果数据集的方式,但是pandas数据框应具有每一行。

没有实际的字符串或数据集,我无法确认这是否完全可行。您能给我们一个Minimal, Complete, and Verifiable example吗?