通过列表和数据框提高for循环的速度

时间:2019-01-15 19:25:58

标签: python-2.7 performance numpy dataframe vectorization

目前,我正在通过组合处理列表原始形式的大量数据。我通过for循环在每组列表上运行条件。问题是for循环这么小,需要花费数小时的数据。我希望通过更改某些功能或对其进行矢量化来优化速度。

我知道最大的拒绝之一是不要在for循环中执行Pandas或Dataframe操作,但是我需要对列进行汇总并对其进行一些整理以获得我想要的。似乎不可避免。

因此,您有一个更好的理解,每个列表在放入数据框后看起来都像这样:

0
                 Name     Role  Cost  Value
0      Johnny Tsunami   Driver  1000     39
1  Michael B. Jackson   Pistol  2500     46
2          Bobby Zuko   Pistol  3000     50
3        Greg Ritcher  Lookout   200     25

                 Name     Role  Cost  Value
4      Johnny Tsunami   Driver  1000     39
5  Michael B. Jackson   Pistol  2500     46
6          Bobby Zuko   Pistol  3000     50
7         Appa Derren  Lookout   250     30

这是当前循环,有什么想法吗?

for element in itertools.product(*combine_list):
   combo = list(element)
   df = pd.DataFrame(np.array(combo).reshape(-1,11))
   df[[2,3]] = df[[2,3]].apply(pd.to_numeric)

   if (df[2].sum()) <= 5000 and (df[3].sum()) > 190:
       df2 = pd.concat([df2, df], ignore_index=True)

结合我已经完成的事情,已经花了一些时间,但还不够。 *df[2].sum() to df[2].values.sum-速度更快

* concat在我尝试使用append并将ifframe一起添加到列表中的if语句中的地方... concat实际上通常快2秒,否则最终将达到相同的速度。 通过.apply(pd.to_numeric)

*更改为.astype(np.int64)也更快。

我目前也正在研究PYPY和Cython,但是我想在头痛之前先从这里开始。

0 个答案:

没有答案