Вы можете использовать следующий синтаксис для одновременного объединения нескольких DataFrames в pandas:
import pandas as pd
from functools import reduce
#define list of DataFrames
dfs = [df1, df2, df3]
#merge all DataFrames into one
final_df = reduce(lambda left,right: pd.merge(left,right,on=['column_name'],
how='outer'), dfs)
В следующем примере показано, как использовать этот синтаксис на практике:
Пример: объединить несколько фреймов данных в Pandas
Предположим, у нас есть следующие три Pandas DataFrames, которые содержат информацию о баскетболистах в разных командах:
import pandas as pd
#create DataFrames
df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D'],
'points': [18, 22, 19, 14]})
df2 = pd.DataFrame({'team': ['A', 'B', 'C'],
'assists': [4, 9, 14]})
df3 = pd.DataFrame({'team': ['C', 'D', 'E', 'F'],
'rebounds': [10, 17, 11, 10]})
#view DataFrames
print(df1)
team points
0 A 18
1 B 22
2 C 19
3 D 14
print(df2)
team assists
0 A 4
1 B 9
2 C 14
print(df3)
team rebounds
0 C 10
1 D 17
2 E 11
3 F 10
Мы можем использовать следующий синтаксис, чтобы объединить все три кадра данных в один:
from functools import reduce
#define list of DataFrames
dfs = [df1, df2, df3]
#merge all DataFrames into one
final_df = reduce(lambda left,right: pd.merge(left,right,on=['team'],
how='outer'), dfs)
#view merged DataFrame
print(final_df)
team points assists rebounds
0 A 18.0 4.0 NaN
1 B 22.0 9.0 NaN
2 C 19.0 14.0 10.0
3 D 14.0 NaN 17.0
4 E NaN NaN 11.0
5 F NaN NaN 10.0
Конечным результатом является один кадр данных, содержащий информацию из всех трех кадров данных.
Обратите внимание, что значения NaN используются для заполнения пустых ячеек в окончательном кадре данных.
Чтобы использовать значение, отличное от NaN , для заполнения пустых ячеек, мы можем использовать функцию fillna() :
from functools import reduce
#define list of DataFrames
dfs = [df1, df2, df3]
#merge all DataFrames into one
final_df = reduce(lambda left,right: pd.merge(left,right,on=['team'],
how='outer'), dfs). fillna('none')
#view merged DataFrame
print(final_df)
team points assists rebounds
0 A 18.0 4.0 none
1 B 22.0 9.0 none
2 C 19.0 14.0 10.0
3 D 14.0 none 17.0
4 E none none 11.0
5 F none none 10.0
Каждая из пустых ячеек теперь заполнена ' none ' вместо NaN .
Примечание.Полную документацию по функции слияния в pandas можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:
Как объединить два кадра данных Pandas в индексе
Как объединить Pandas DataFrames в несколько столбцов
Как сложить несколько фреймов данных Pandas