qq_42400181 2020-03-13 23:45 采纳率: 0%
浏览 700

多进程处理数据,处理结束之后dataframe里面的数据无变化。

本人正在处理大量的数据的时候想到采用多进程的方式加快数据处理的速度,但是不知道为什么,数据处理完之后,dataframe里面的数据并没有像函数定义那样新增一列,然后等于别的两列相加得来。所以想来请教一下各位大佬。

以下是我那50条数据来试验的代码:

from multiprocessing import Pool

import pandas as pd

f = open(r'F:\寒假\交通大数据计算\数据\0511_20.csv')

df = pd.read_csv(f,nrows=50)

def youfunc(a):

a['new']=a['new'].map(lambda x:x['FNODE']+x['TNODE'])

return a

if name == '__main__':

p = Pool(2)

df1 = df.iloc[:25]

df2 = df.iloc[25:49]

list_df = [df1,df2]

for i in range(2):
p.apply_async(youfunc, args=(list_df[i],))

p.close()

p.join()

希望有大佬能指出小弟的错误,感激不尽感激不尽。

  • 写回答

1条回答 默认 最新

  • 千寻1997 2020-05-27 17:28
    关注

    你没有获取进程处理的返回结果,只是单纯的处理了datatframes
    我找了网上一个例子,如下:

    import time
    from multiprocessing import Pool
    
    def fn(i):
        time.sleep(0.5)
        return i*i
    
    if __name__ == '__main__':
        p = Pool(5)
        l = []
        for i in range(10):
            ret = p.apply_async(fn,args=(i,))
            l.append(ret)
            # print(ret.get())    # 阻塞 get 方法会等待 fn 执行完毕拿到返回值才会往下走,这里从异步变成了同步
            # print('asd')
        for i in l: # 解决方法.
            i.get()
            print('asd')
    
    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面