gpt4 book ai didi

Python Pandas 多处理应用

转载 作者:太空狗 更新时间:2023-10-30 00:14:29 26 4
gpt4 key购买 nike

我想知道是否有办法并行执行 pandas 数据框应用功能。我环顾四周,没有发现任何东西。至少在理论上我认为实现起来应该相当简单,但还没有看到任何东西。毕竟这实际上是并行的教科书定义。有没有其他人尝试过这个或知道一种方法?如果没有人有任何想法,我想我可能会尝试自己编写它。

我正在使用的代码如下。抱歉缺少导入语句。它们与许多其他东西混合在一起。

def apply_extract_entities(row):
names=[]
counter=0
print row
for sent in nltk.sent_tokenize(open(row['file_name'], "r+b").read()):
for chunk in nltk.ne_chunk(nltk.pos_tag(nltk.word_tokenize(sent))):
if hasattr(chunk, 'node'):
names+= [chunk.node, ' '.join(c[0] for c in chunk.leaves())]
counter+=1
print counter
return names

data9_2['proper_nouns']=data9_2.apply(apply_extract_entities, axis=1)

编辑:

所以这是我尝试过的。我尝试仅使用 iterable 的前五个元素来运行它,并且它比我连续运行它花费的时间更长,所以我认为它不起作用。

os.chdir(str(home))
data9_2=pd.read_csv('edgarsdc3.csv')
os.chdir(str(home)+str('//defmtest'))

#import stuff
from nltk import pos_tag, ne_chunk
from nltk.tokenize import SpaceTokenizer

#define apply function and apply it
os.chdir(str(home)+str('//defmtest'))

####

#this is our apply function
def apply_extract_entities(row):
names=[]
counter=0
print row
for sent in nltk.sent_tokenize(open(row['file_name'], "r+b").read()):
for chunk in nltk.ne_chunk(nltk.pos_tag(nltk.word_tokenize(sent))):
if hasattr(chunk, 'node'):
names+= [chunk.node, ' '.join(c[0] for c in chunk.leaves())]
counter+=1
print counter
return names


#need something that populates a list of sections of a dataframe
def dataframe_splitter(df):
df_list=range(len(df))
for i in xrange(len(df)):
sliced=df.ix[i]
df_list[i]=sliced
return df_list

df_list=dataframe_splitter(data9_2)
#df_list=range(len(data9_2))
print df_list

#the multiprocessing section
import multiprocessing

def worker(arg):
print arg
(arg)['proper_nouns']=arg.apply(apply_extract_entities, axis=1)
return arg

pool = multiprocessing.Pool(processes=10)

# get list of pieces
res = pool.imap_unordered(worker, df_list[:5])
res2= list(itertools.chain(*res))
pool.close()
pool.join()

# re-assemble pieces into the final output
output = data9_2.head(1).concatenate(res)
print output.head()

最佳答案

对于多处理,最好生成几个大数据 block ,然后重新组合它们以产生最终输出。

来源

import multiprocessing

def worker(arg):
return arg*2

pool = multiprocessing.Pool()

# get list of pieces
res = pool.map(worker, [1,2,3])
pool.close()
pool.join()

# re-assemble pieces into the final output
output = sum(res)
print 'got:',output

输出

got: 12

关于Python Pandas 多处理应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25510482/

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