【发布时间】:2021-05-25 23:21:58
【问题描述】:
我有一个类,它有一堆函数来检查数据与一个巨大的数据帧 ~33gb。变量中的每个值都针对数据帧中的一列(比如说 D 列)运行,然后将其附加到数据帧本身以供其他迭代计算值。
无论如何,i 是针对 df.D 运行的,而 j 是针对 df.D 运行的,并且 i 的结果以此类推。我正在尝试查看哪组数字将提供最佳输出。下面是代码外观的sn-p。
program.py
class Test:
def runTest():
pass
def run():
runTest()
bunch of if/else statements to check the data
pd.to_csv to export the result
def aa(int):
calculation..
def bb(int):
do something
...
runTest.py
for i in range(10,25):
for j in range(45,85):
for k in range(6,16):
for l in range(7,21):
for m in range(65,75):
class hello(Test):
def runTest():
a = aa(i)
b = bb(j)
...
hello().run()
我已尝试使用 itertools.product 列出该范围内的所有数字。但我不知道如何在我的程序中提取这些值。我希望它具有可扩展性,因为范围会更大,并且会添加更多参数来测试程序。
如何使用 dask 或 multiprocessing 运行这些嵌套的 for 循环,以最大限度地减少运行此任务的时间?或任何其他建议将不胜感激。另外,如果有更好的方法来导出结果。请告诉我。
【问题讨论】:
-
刚开始:在 for 循环中定义类没有好处 - 只需在顶层声明它。
-
每列使用
.apply(some_func, axis=0)怎么样?目前的代码看起来确实很难优化。 -
@jsbueno 一旦我找出“最佳”数字。不需要所有的 for 循环。它只是运行程序的类。
-
@SultanOrazbayev 所以 .apply(some_func, axis=0) 为每一列并预填充数据框并运行程序?唯一的问题是 i = 11 和 i = 12 等的数据会有所不同。并且有这么多的迭代。我无法有效地存储/读取数据。
标签: python pandas multiprocessing nested-loops dask