相关疑难解决方法(0)

从MySQL加载数字数据到python/pandas/numpy数组的最快方法

我想从MySQL表中读取一些数字(double,即float64)数据.数据大小约为200k行.

MATLAB参考:

tic;
feature accel off;
conn = database(...);
c=fetch(exec(conn,'select x,y from TABLENAME'));
cell2mat(c.data);
toc
Run Code Online (Sandbox Code Playgroud)

经过的时间约为1秒.

在python中做同样的事情,使用这里找到的几个例子(我已经尝试了所有这些,即使用pandas read_frame,frame_query和__processCursor函数): 如何将SQL查询结果转换为PANDAS数据结构?

参考python代码:

import pyodbc
import pandas.io.sql as psql
import pandas
connection_info = "DRIVER={MySQL ODBC 3.51 \
Driver};SERVER=;DATABASE=;USER=;PASSWORD=;OPTION=3;"
cnxn = pyodbc.connect(connection_info)
cursor = cnxn.cursor()
sql = "select x,y from TABLENAME"
#cursor.execute(sql)
#dataframe = __processCursor(cursor, dataframe=True)
#df = psql.frame_query(sql, cnxn, coerce_float=False)
df = psql.read_frame(sql, cnxn)
cnxn.close()
Run Code Online (Sandbox Code Playgroud)

大约需要6秒钟.Profiler说所有花费的时间都在read_frame中.我想知道是否有人能给我一些提示如何加速至少匹配MATLAB代码.如果在python中完全可以的话.

编辑:

瓶颈似乎在pyodbc库中的cursor.execute(在pymysql库中)或cursor.fetchall()内.最慢的部分是按元素(逐行,逐列)读取返回的MySQL数据元素,并将其转换为先前由同一个库推断的数据类型.

到目前为止,我通过这个非常脏的解决方案设法加快了接近MATLAB的速度:

import pymysql
import numpy

conn = pymysql.connect(host='', port=, user='', passwd='', db='')
cursor = conn.cursor() …
Run Code Online (Sandbox Code Playgroud)

python mysql numpy mysql-python pandas

11
推荐指数
1
解决办法
9282
查看次数

标签 统计

mysql ×1

mysql-python ×1

numpy ×1

pandas ×1

python ×1