熊猫瓶颈,切片速度更快?

时间:2015-08-02 19:57:36

标签: python python-2.7 pandas sqlite

在一个8核,14GB的实例上,类似这项工作的工作需要大约2周的时间才能完成,并且需要花费大量的改变,因此任何有关加速的帮助都将受到高度赞赏。

我有一个SQL表,每行有660万行,两列,整数。整数表示大熊猫的数据框架位置(与我一起,填充这些框架位置纯粹是为了取消一些处理时间,但实际上并没有减少):

整数上升到26000,对于每个整数,我们期待5-250的范围:

it_starts   it_ends
1             5
2             6
...
25,996   26000
...
...
1             6
2             7
...
25,995   26000
...
...
1             7
2             8
...
25,994   26000

如果情况不够清楚,表格中填写的内容如下:

chunks = range(5,250)
for chunk_size in chunks:
    x = np.array(range(1,len(df)-chunk_size))
    y = [k+chunk_size for k in x]
    rng_tup = zip(x,y)
    #do table inserts 

正如我所说,我使用此表从pandas数据帧中获取切片,其中包含以下内容:

rngs = c.execute("SELECT it_starts,it_ends FROM rngtab").fetchall()
for k in rngs:
      it_sts=k[0]
      it_end=k[1]
      fms  = df_frame[it_sts:it_end]

我在'df_frame'使用了以下pandas代码,而db是相关数据库:

with db:
    sqla  =("SELECT ctime, Date, Time, high, low FROM quote_meta)
    df    =psql.read_sql(sqla, db)
    df_frame = df.iloc[:,[0,1,2,3,4]]

因此,为了清晰起见,将它们放在一起:

import sqlite3
import pandas.io.sql as psql
import pandas as pd

db= sqlite3.connect("HIST.db")
c = db.cursor()
c.execute("PRAGMA synchronous = OFF")
c.execute("PRAGMA journal_mode = OFF")

with db:
    sqla  =("SELECT ctime, Date, Time, high, low FROM quote_meta)
    df    =psql.read_sql(sqla, db)
    df_frame = df.iloc[:,[0,1,2,3,4]]

rngs = c_rng.execute("SELECT it_starts,it_ends FROM rngtab").fetchall()
for k in rngs:
        it_sts=k[0]
        it_end=k[1]
        fms  = df_frame[it_sts:it_end]

        for i in xrange(0,len(fms)):
            #perform trivial (ish) operations on slice,
            #trivial compared to the overall time that is.

正如您可能已经猜到的那样,'df_frame[it_sts:it_end]'正在造成巨大的瓶颈,因为它需要创建~6m切片(总共40个独立的数据库)),因此我认为投资一点是明智的在这里问这个问题;在我投入更多资金之前,我在这里犯了任何重大错误吗?有什么人可以建议加快速度吗?感谢。

0 个答案:

没有答案