Как объединить несколько фреймов данных в Pandas (с примером)


Вы можете использовать следующий синтаксис для одновременного объединения нескольких 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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.