Я создал функции, которые возвращают фрейм данных. Теперь я хочу объединить все фреймы данных в один. Во-первых, я вызвал все функции и использовал функцию уменьшения и слияния. Это не сработало, как ожидалось. Ошибка, которую я получаю, это «невозможно объединить функцию. Это должен быть кадр данных или ряд. Я проверил тип моего df, это кадр данных не функции Я не знаю, откуда берется ошибка.

def func1():
  return df1

def func2():
  return df2

def func3():
  return df3

def func4():
  return df4

def alldfs():
  df_1 = func1()
  df_2 = func2()
  df_3 = func3()
  df_4 = func4()

result = reduce(lambda df_1,d_2,df_3,df_4: pd.merge(df_1,df_2,df_3,df_4,on ="EMP_ID"),[df1,df2,df3,df4)
 print(result)
0
Learner 27 Мар 2020 в 21:07
То, что вы делаете, кажется неправильным... с точки зрения Python и Pandas. Вы должны переоценить то, что вы пытаетесь сделать, и спросить, как это сделать.
 – 
piRSquared
27 Мар 2020 в 21:13
Извините за весь беспорядочный код. Все, что я хотел сделать, это объединить все 4 фрейма данных в один. У меня будет более 4 фреймов данных, поэтому я пробовал удобный способ объединить все
 – 
Learner
27 Мар 2020 в 21:21
1
pd.concat([d.set_index('EMP_ID') for d in [df_1, df_2, df_3, df_4]], axis=1)
 – 
piRSquared
27 Мар 2020 в 21:22
Или если вы настаиваете на сокращенном ответе (хотя и медленнее) reduce(lambda a, b: a.merge(b, on='EMP_ID'), [df_1, df_2, df_3, df_4])
 – 
piRSquared
27 Мар 2020 в 21:25
Будет ли это очень медленно, если мне придется объединить 10 фреймов данных. Однако фреймы данных имеют небольшой размер.
 – 
Learner
27 Мар 2020 в 21:30

1 ответ

Вы можете попробовать что-то вроде этого (при условии, что EMP_ID является общим для всех фреймов данных, и вы хотите пересечь все фреймы данных) -

result = pd.merge(df1, df2, on='EMP_ID').merge(df3, on='EMP_ID').merge(df4, on='EMP_ID')
1
Sajan 27 Мар 2020 в 21:11