Python 如何并行化用于更改数据类型和调用其他函数的循环

Python 如何并行化用于更改数据类型和调用其他函数的循环,python,pandas,multiprocessing,Python,Pandas,Multiprocessing,更改数据帧中某些列的数据类型是一个非常常见的问题。在不完全重新编写与dask兼容的所有代码的情况下,我希望在代码中并行一些for循环 cont_vars = [...] # list of continuous variables cat_vars = [...] # list of categorical variables for col in cont_vars: df[col] = df[col].astype('float32') for col in cat_vars:

更改数据帧中某些列的数据类型是一个非常常见的问题。在不完全重新编写与dask兼容的所有代码的情况下,我希望在代码中并行一些for循环

cont_vars = [...] # list of continuous variables
cat_vars = [...] # list of categorical variables

for col in cont_vars:
    df[col] = df[col].astype('float32')

for col in cat_vars:
    df[col] = df[col].astype('category').cat.as_ordered()
例如,我想更改特定列的数据类型,因为有700多个列需要更改,所以可能会非常慢。我已经看到了许多关于使用
多处理来并行化函数的问题,但是我还没有看到任何解决方案能够加快我的代码速度

cont_vars = [...] # list of continuous variables
cat_vars = [...] # list of categorical variables

for col in cont_vars:
    df[col] = df[col].astype('float32')

for col in cat_vars:
    df[col] = df[col].astype('category').cat.as_ordered()
我也很难并行化调用函数的循环。例如:

for col in df[i for i in df.columns if i.startswith('Funnel')]:
    df = function1(df, col, 9, 1)

for col in [i for i in df.columns if i.endswith('Bracket')]:
    df = pd.merge_asof(df, function2(df[col], 19), left_index=True, right_index=True)

提前谢谢

我强烈怀疑这将是一个糟糕的移动使用多处理。我可以想象数据帧会被完全复制到内存中的所有进程中,除非你使用某种管理器,然后必须在最后把它们重新组合在一起。。。所以它会占用很多内存。。。你将如何着手解决这个问题?运行这段代码大约需要20分钟,而且都是单线程的。不仅内存效率低下,而且时间可能会增加,不仅仅是大量拷贝,还可能是IPC或最终将结果拉回到一起。我脑子里一点想法都没有,我会想一想你如何在GIL下推动数据转换。这到底花了多少时间?我怀疑大部分都被函数所束缚,而不是改变数据类型?你看过矢量化这些计算吗?映射函数将在Python timeMultiprocessing中运行对于共享数据库来说也是危险的,因为最好的做法是在实现下一个更改或进程之前等待整个进程完成,因为对象在内存中不共享。相反,它们在最后被重新组合,因此如果在一个df上有多个进程,那么如果在同一个df上操作,第一个进程需要在第二个进程之前执行。