Объединить датафреймы из двух функций

Есть две функции, каждая из которых принимает, соответственно, данные data_1 и data_2 (это могут быть и числа, и текст), обрабатывает их и формирует датафрейм df_1 и df_2. Кодом

def func_1(data_1):
   ...
   print(df_1)
   return (df_1)

def func_2(data_2):
   ...
   print(df_2)
   return (df_2)
   
new_df = pd.concat([df_1, df_2])
print(new_df)

я пытаюсь объединять полученные датафреймы в один (по идее столбцы одного должны складываться со столбцами другого). Данное объединение происходит, но только один раз только один раз, а нужно, чтобы они происходило постоянно при каждом новом попадании data_1 и data_2 в соответствующие функции.


Ответы (1 шт):

Автор решения: Алексей Р

Чтобы какой-то фрейм накапливал информацию, например, new_df, нужно его включать в список (первый аргумент метода pd.concat()). Также разумно воспользоваться возвращаемыми из функций результатами, т.е. включить их в тот же список.
Обращаю внимание, что метод pd.concat() - медленный. Лучше сначала сформировать полный массив данных, например, в списке или словаре, и потом уже создать фрейм.

def func_1(data_1):
    df_1 = pd.DataFrame([[data_1] * 3] * 2, columns=['Col1', 'Col3', 'Col3'])
    return df_1


def func_2(data_2):
    df_2 = pd.DataFrame([[data_2 + 100] * 3] * 2, columns=['Col1', 'Col3', 'Col3'])
    return df_2


new_df = pd.DataFrame()
for i in range(5):
    new_df = pd.concat([new_df, func_1(i), func_2(i)], ignore_index=True)
print(new_df)
    Col1  Col3  Col3
0      0     0     0
1      0     0     0
2    100   100   100
3    100   100   100
4      1     1     1
5      1     1     1
6    101   101   101
7    101   101   101
8      2     2     2
9      2     2     2
10   102   102   102
11   102   102   102
12     3     3     3
13     3     3     3
14   103   103   103
15   103   103   103
16     4     4     4
17     4     4     4
18   104   104   104
19   104   104   104
→ Ссылка