首页 > 解决方案 > 运行多处理代码时 Pandas Dataframe 不更新

问题描述

我正在尝试使用带有以下类的临时 df(self.df_temp['linkedin_profile']) 中的列更新数据框(self.df),但它似乎没有更新任何内容。编码:

class NameToSocialURLScraper:


def __init__(self, csv_file_name, person_name_column, organization_name_column):
    self.proxy_list = PROXY_LIST
    pool = Pool()
    self.csv_file_name = csv_file_name
    self.person_name_column = person_name_column
    self.organization_name_column = organization_name_column
    self.df = pd.read_csv(csv_file_name)
    self.df_temp = pd.DataFrame()

def internal_linkedin_job(self):
    self.df['linkedin_profile'] = np.nan
    self.df_temp['linkedin_profile'] = np.nan
    self.df_temp['linkedin_profile'] = self.df.apply(
        lambda row: term_scraper(
            str(row[self.person_name_column]) + " " + str(row[self.organization_name_column]), self.proxy_list,
            'link', output_generic=False), axis=1)
    self.df['linkedin_profile'] = self.df_temp['linkedin_profile']
    print(self.df.values)

...

def multiprocess_job(self):
    multiprocessing.log_to_stderr(logging.DEBUG)
    linkedin_profile_proc = Process(target=self.internal_linkedin_job, args=())
    jobs = [linkedin_profile_proc]
    # Start the processes (i.e. calculate the random number lists)
    for j in jobs:
        j.start()

    # Ensure all of the processes have finished
    for j in jobs:
        j.join()

在 internal_linkedin_job 中打印时,它会显示带有新列 'linkedin_profile' 的 df,但是当我在 j.join() 之后打印时,该列不存在。

标签: pythonpandasdataframemultiprocessingscreen-scraping

解决方案


在进行多处理时,每个进程都在自己的内存空间中运行。您需要重构代码,以便 internal_linkedin_job 返回数据帧。


推荐阅读