gpt4 book ai didi

python - 并行迭代 pandas df

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:15 25 4
gpt4 key购买 nike

所以,我想并行遍历 pandas df,所以假设我有 15 行,然后我想并行遍历它,而不是逐行遍历。

df:-

df = pd.DataFrame.from_records([
{'domain':'dnd','duration':'90','media_file':'testfont.wav','user':'tester_food','channel':'confctl-2' },
{'domain':'hrpd','duration':'90','media_file':'testfont.wav','user':'tester_food','channel':'confctl-2' },
{'domain':'blhp','duration':'90','media_file':'testfont.wav','user':'tester_food','channel':'confctl-2' },
{'domain':'rbswp','duration':'90','media_file':'testfont.wav','user':'tester_food','channel':'confctl-2' },
{'domain':'foxbp','duration':'90','media_file':'testfont.wav','user':'tester_food','channel':'confctl-2' },
{'domain':'rbsxbp','duration':'90','media_file':'testfont.wav','user':'tester_food','channel':'confctl-2' },
{'domain':'dnd','duration':'90','media_file':'testfont.wav','user':'tester_food','channel':'confctl-2' },
{'domain':'hrpd','duration':'90','media_file':'testfont.wav','user':'tester_food','channel':'confctl-2' }

])

enter image description here

因此,我遍历 df 并制作命令行,然后将输出存储在 df 中并进行数据过滤,最后将其存储到 influxdb 中。问题是我在迭代它时一个一个地做。我想并行遍历所有行。

截至目前,我已经制作了 20 个脚本并使用多处理并行处理所有脚本。当我必须在所有 20 个脚本中进行更改时,这很痛苦。我的脚本如下所示:-

for index, row in dff.iterrows():
domain = row['domain']
duration = str(row['duration'])
media_file = row['media_file']
user = row['user']
channel = row['channel']
cmda = './vaa -s https://' + domain + '.www.vivox.com/api2/ -d ' +
duration + ' -f ' + media_file + ' -u .' + user + '. -c
sip:confctl-2@' + domain + '.localhost.com -ati 0ps-host -atk 0ps-
test'

rows = [shlex.split(line) for line in os.popen(
cmda).read().splitlines() if line.strip()]

df = pd.DataFrame(rows)
"""
Bunch of data filteration and pushing it into influx
"""

截至目前,如果我在 df 中运行 15 行并进行如下所示的并行处理,我将拥有 15 个脚本:-

import os
import time
from multiprocessing import Process
os.chdir('/Users/akumar/vivox-sdk-4.9.0002.30719.ebb523a9')
def run_program(cmd):
# Function that processes will run
os.system(cmd)

# Creating command to run
commands = ['python testv.py']
commands.extend(['python testv{}.py'.format(i) for i in range(1, 15)])

# Amount of times your programs will run
runs = 1

for run in range(runs):
# Initiating Processes with desired arguments
running_programs = []
for command in commands:
running_programs.append(Process(target=run_program, args=(command,)))
running_programs[-1].daemon = True

# Start our processes simultaneously
for program in running_programs:
program.start()

# Wait untill all programs are done
while any(program.is_alive() for program in running_programs):
time.sleep(1)

问题:- 我如何遍历 df 并使所有 15 行并行运行并在 for 循环内执行所有操作。

最佳答案

我将从 Reddit 上复制并粘贴我的答案(以防有人遇到类似情况):

import dask.dataframe as ddf

def your_function(row):
domain = row['domain']
duration = str(row['duration'])
media_file = row['media_file']
user = row['user']
channel = row['channel']
cmda = './vaa -s https://' + domain + '.www.vivox.com/api2/ -d ' +
duration + ' -f ' + media_file + ' -u .' + user + '. -c
sip:confctl-2@' + domain + '.localhost.com -ati 0ps-host -atk 0ps- test'

rows = [shlex.split(line) for line in os.popen(
cmda).read().splitlines() if line.strip()]

df_dask = ddf.from_pandas(df, npartitions=4) # where the number of partitions is the number of cores you want to use
df_dask['output'] = df_dask.apply(lambda x: your_function(x), meta=('str')).compute(scheduler='multiprocessing')

您可能需要在 apply 方法中使用轴参数。

关于python - 并行迭代 pandas df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53561794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com