如何使用 pandas 将每个进程从多处理写入单独的 csv 文件?
How can I write each process from multiprocessing to a separate csv file using pandas?
我有几个大的 txt 文件。称它们为 mytext01.txt、mytext02.txt、mytext03.txt(实际上不止三个)。我想为每个文件创建一个单独的数据框来计算某些关键字的出现次数,然后将每个数据框写入其自己的 csv 文件。我希望使用多处理库在一个进程中处理每个 txt 文件。
我已经编写了我认为可以做我想做的代码,但 csv 文件从未出现(代码似乎没有做任何事情——整个过程运行得比通常需要的要快只需加载一个文件)。这是我尝试过的简化版本:
import pandas as pd
from multiprocessing import Pool
keywords=['dog','cat','fish']
def count_words(file_number):
file=path+'mytext{}.txt'.format(file_number)
with open(file, 'r',encoding='utf-8') as f:
text = f.read()
text=text.split(' ')
words_dict=dict(zip(positive,[0 for i in words]))
for word in words_dict.keys():
words_dict[word]=text.count(word)
words_df=pd.DataFrame.from_dict(words_dict,orient='index')
words_df.to_csv('word_counts{}.csv'.format(file_number))
if __name__ == '__main__':
pool = Pool()
pool.map(count_words, ['01','02','03'])
我对使用多处理不是很熟悉,所以如果知道我做错了什么,将不胜感激。谢谢!
根据我的经验,最好有一个专门的并行化函数
import multiprocessing as mp
def parallelize(fun, vec, cores):
with mp.Pool(cores) as p:
res = p.map(fun, vec)
return res
现在您只需检查您的函数 count_words
是否适用于单个 file_number
并且您可以使用 parallelize
.
我有几个大的 txt 文件。称它们为 mytext01.txt、mytext02.txt、mytext03.txt(实际上不止三个)。我想为每个文件创建一个单独的数据框来计算某些关键字的出现次数,然后将每个数据框写入其自己的 csv 文件。我希望使用多处理库在一个进程中处理每个 txt 文件。
我已经编写了我认为可以做我想做的代码,但 csv 文件从未出现(代码似乎没有做任何事情——整个过程运行得比通常需要的要快只需加载一个文件)。这是我尝试过的简化版本:
import pandas as pd
from multiprocessing import Pool
keywords=['dog','cat','fish']
def count_words(file_number):
file=path+'mytext{}.txt'.format(file_number)
with open(file, 'r',encoding='utf-8') as f:
text = f.read()
text=text.split(' ')
words_dict=dict(zip(positive,[0 for i in words]))
for word in words_dict.keys():
words_dict[word]=text.count(word)
words_df=pd.DataFrame.from_dict(words_dict,orient='index')
words_df.to_csv('word_counts{}.csv'.format(file_number))
if __name__ == '__main__':
pool = Pool()
pool.map(count_words, ['01','02','03'])
我对使用多处理不是很熟悉,所以如果知道我做错了什么,将不胜感激。谢谢!
根据我的经验,最好有一个专门的并行化函数
import multiprocessing as mp
def parallelize(fun, vec, cores):
with mp.Pool(cores) as p:
res = p.map(fun, vec)
return res
现在您只需检查您的函数 count_words
是否适用于单个 file_number
并且您可以使用 parallelize
.