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,忽略5,忽略6)

第 3 行:...

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

4

2 回答 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)

列表理解代码取自this。您没有具体说明您想要的结果数据集,但 pandas 数据框应该包含您的每一行。

如果没有实际的字符串或数据集,我无法确认这是否完全有效。你能给我们一个最小的、完整的和可验证的例子吗?

于 2018-06-28T20:50:16.333 回答
0

我不怀疑在 MySQL 中有一种方法可以做到这一点,但我会通过将记录导出为 .CSV 来处理它。

导出为 CSV

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

于 2018-06-28T19:20:55.527 回答