Как сохранить два отдельных CSV-файла при распараллеливании кода?

В настоящее время у меня работает этот код

def single_iteration(iter:int):
   some_parameters = 100
   data1, data2, data3, data4 = do_something()
   result = []
   for i in range(100):
       data = {'Col1':data1, 'Col2':data1, 'Col3':data3, 'Col4':data4}
       result.append(data)
   df = pd.DataFrame(result)
   return df

if __name__ == "__main__":
   run_stop = 100
   number_of_cores = int(os.environ['SLURM_CPUS_PER_TASK'])
   with multiprocessing.Pool(number_of_cores) as pool:
      results = pool.map(single_iteration, range(run_stop))
   df = pd.concat(results, ignore_index=True)
   df.to_csv(path, file_name)

Однако теперь мне нужны два разных CSV, например, df1 = pd.DaFrame[{'Col1':data1, 'Col2':data2}], df2 = pd.DaFrame[{'Col3':data3, 'Col4':data4}] и return в каждом запуске, а затем объединить их отдельно и сохранить.

(Кстати, код, который вы вставляете if __name__ == '__main__':, должен быть тривиальным; цель этого шаблона — позволить вам импортировать код, чего вы в любом случае не захотите делать, если нужная вам логика недоступна через импорт. См. также stackoverflow .com/a/69778466/874188)

tripleee 22.05.2024 07:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
import os
import multiprocessing
import pandas as pd


def single_iteration(iter: int):
    some_parameters = 100

    data1 = [1] * 100
    data2 = [2] * 100
    data3 = [3] * 100
    data4 = [4] * 100

    result1 = []
    result2 = []

    for i in range(100):
        data1_dict = {'Col1': data1[i], 'Col2': data2[i]}
        data2_dict = {'Col3': data3[i], 'Col4': data4[i]}
        result1.append(data1_dict)
        result2.append(data2_dict)

    df1 = pd.DataFrame(result1)
    df2 = pd.DataFrame(result2)
    return df1, df2


if __name__ == "__main__":
    run_stop = 100
    number_of_cores = int(os.environ.get('SLURM_CPUS_PER_TASK', 4))

    with multiprocessing.Pool(number_of_cores) as pool:
        results = pool.map(single_iteration, range(run_stop))

    # Separate the results into two lists of DataFrames
    df1_list = [res[0] for res in results]
    df2_list = [res[1] for res in results]

    # Concatenate all DataFrames in each list
    df1 = pd.concat(df1_list, ignore_index=True)
    df2 = pd.concat(df2_list, ignore_index=True)

    df1.to_csv('df1_file_name.csv', index=False)
    df2.to_csv('df2_file_name.csv', index=False)

Другие вопросы по теме