【发布时间】:2018-11-26 17:16:39
【问题描述】:
有没有更快的方法将 pyodbc.rows 对象转换为 pandas Dataframe?将超过 1000 万个 pyodbc.rows 对象的列表转换为 pandas 数据帧大约需要 30-40 分钟。
import pyodbc
import pandas
server = <server_ip>
database = <db_name>
username = <db_user>
password = <password>
port='1443'
conn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';PORT='+port+';DATABASE='+database+';UID='+username+';PWD='+ password)
#takes upto 12 minutes
rows = cursor.execute("select top 10000000 * from [LSLTGT].[MBR_DIM] ").fetchall()
#Read cursor data into Pandas dataframe.....Takes forever!
df = pandas.DataFrame([tuple(t) for t in rows])
【问题讨论】:
-
如果你会使用 sqlalchemy,你可以看看 pandas.read_sql (pandas.pydata.org/pandas-docs/stable/generated/…)
-
@Owen 那是我的上一期。我尝试使用 pandas.read_sql 并且读取所有数据需要很长时间。请参阅link 我正在尝试找到一种更快的方法将数据从 SQL 服务器加载到 Pandas Dataframe Just Once,然后我计划将 df 存储为羽毛格式以便后续更快地读取。
-
在 Management Studio 中执行该查询需要多长时间?我的猜测是 pandas 不是这里的问题。
-
@Owen - 在 SSMS 上读取 1000 万条记录需要 8:25 分钟。
-
SSMS 是否与您的 python 代码在同一台机器上运行?