动机
将值(按行)写入数据框时,我正在尝试优化代码。 这是一个主意,我有一个n行和p列的数据框,并且我想根据一个公式为该数据框的每一行添加一个值,该公式取决于该行的列值。为此,我正在使用数据框的apply方法,如下所示:
data.apply(lambda x: fill(x,columnNames),axis=1)
其中fill是一种我将应用于数据帧“数据”的每一行的方法,它将行和columnNames作为参数,并将转换为“数据”行。
此版本代码的问题在于,由于它遍历了数据帧的所有行(100 000行和300列),因此非常耗时。
想法
尽管我要使用多处理来并行化操作。例如,假设同时运行10个进程,每个进程将处理chunk_size个行。
用于数据帧块(1)
中的块对每个块使用'apply' (2),以获取相同的执行顺序:“,如果chunk1代表行[0:10]和chunk2行[10:20],apply方法应首先在chunk1上完成,然后在chunk2上完成。“
(1)如何使用生成器直接从数据帧创建块?如果直接从excel文件中读取,只需添加参数iterator = True和chunksize = chunksize即可解决问题。但是,要直接处理数据框,我们需要创建一个生成器,该生成器可以批量(或大块)地遍历数据。 iterrows()不会有用,因为它会逐行遍历数据。
(2)如果在块上使用,我认为这行不通,因为 块只是数据的副本或在数据中。应用我直接修改数据框数据。
有什么想法吗?