使用块(多处理)在数据帧中写入

时间:2019-01-15 22:20:56

标签: python pandas multiprocessing

动机

将值(按行)写入数据框时,我正在尝试优化代码。 这是一个主意,我有一个n行和p列的数据框,并且我想根据一个公式为该数据框的每一行添加一个值,该公式取决于该行的列值。为此,我正在使用数据框的apply方法,如下所示:

data.apply(lambda x: fill(x,columnNames),axis=1)

其中fill是一种我将应用于数据帧“数据”的每一行的方法,它将行和columnNames作为参数,并将转换为“数据”行。

此版本代码的问题在于,由于它遍历了数据帧的所有行(100 000行和300列),因此非常耗时。

想法

尽管我要使用多处理来并行化操作。例如,假设同时运行10个进程,每个进程将处理chunk_size个行。

  • 定义n个处理器的池: pool = Pool(processes = 8)
  • 用于数据帧块(1)

    中的块
    • 对每个块使用'apply' (2),以获取相同的执行顺序:“,如果chunk1代表行[0:10]和chunk2行[10:20],apply方法应首先在chunk1上完成,然后在chunk2上完成。“

      • (1)如何使用生成器直接从数据帧创建块?如果直接从excel文件中读取,只需添加参数iterator = True和chunksize = chunksize即可解决问题。但是,要直接处理数据框,我们需要创建一个生成器,该生成器可以批量(或大块)地遍历数据。 iterrows()不会有用,因为它会逐行遍历数据。

      • (2)如果在块上使用,我认为这行不通,因为 块只是数据的副本或在数据中。应用我直接修改数据框数据。

有什么想法吗?

0 个答案:

没有答案