Pandas: как объединить два фрейма данных с разными именами столбцов
Вы можете использовать следующий базовый синтаксис для объединения двух pandas DataFrames с разными именами столбцов:
pd.merge(df1, df2, left_on='left_column_name', right_on='right_column_name')
В следующем примере показано, как использовать этот синтаксис на практике.
Пример: объединение двух фреймов данных Pandas с разными именами столбцов
Предположим, у нас есть следующие два Pandas DataFrames:
import pandas as pd #create first DataFrame df1 = pd.DataFrame() #view DataFrame print(df1) team points 0 A 4 1 B 4 2 C 6 3 D 8 4 E 9 5 F 5 #create second DataFrame df2 = pd.DataFrame() #view DataFrame print(df2) team_name rebounds 0 A 12 1 B 7 2 C 8 3 D 8 4 E 5 5 F 11
Мы можем использовать следующий синтаксис для выполнения внутреннего соединения, используя столбец team в первом фрейме данных и столбец team_name во втором фрейме данных:
#merge DataFrames df3 = pd.merge(df1, df2, left_on='team', right_on='team_name') #view result print(df3) team points team_name rebounds 0 A 4 A 12 1 B 4 B 7 2 C 6 C 8 3 D 8 D 8 4 E 9 E 5 5 F 5 F 11
Обратите внимание, что мы можем успешно выполнить внутреннее соединение, даже несмотря на то, что имена двух столбцов, которые мы использовали для соединения, были разными в каждом DataFrame.
Обратите внимание, что мы также можем использовать следующий код, чтобы удалить столбец team_name из окончательного объединенного DataFrame, поскольку значения в этом столбце совпадают со значениями в столбце team :
#drop team_name column df3. drop('team_name', axis= 1 , inplace= True ) #view updated DataFrame print(df3) team points rebounds 0 A 4 12 1 B 4 7 2 C 6 8 3 D 8 8 4 E 9 5 5 F 5 11
Обратите внимание, что столбец team_name был удален из DataFrame.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:
Как объединить несколько фреймов данных в 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() df2 = pd.DataFrame() df3 = pd.DataFrame() #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: легкое руководство с пошаговыми инструкциями
В результате выполнения данного кода, вы получите объединенный датафрейм df_merged , содержащий все столбцы из обоих исходных датафреймов, а строки будут объединены на основе значения столбца ‘key’.
Детальный ответ
Как объединить два датафрейма pandas
Объединение двух датафреймов в pandas — это распространенная операция при работе с данными. Может возникнуть необходимость объединить данные из разных источников или комбинировать информацию из разных таблиц для анализа. В pandas есть несколько способов сделать это, но два наиболее популярных метода — это merge() и concat().
Метод merge()
Метод merge() позволяет объединять два датафрейма на основе одного или нескольких столбцов, называемых ключами. Этот метод основан на операции объединения в SQL, поэтому понимание SQL-синтаксиса может быть полезно при использовании этой функции. Пример использования метода merge() для объединения двух датафреймов:
import pandas as pd # Создание первого датафрейма df1 = pd.DataFrame() # Создание второго датафрейма df2 = pd.DataFrame() # Объединение датафреймов по столбцу 'key' merged_df = pd.merge(df1, df2, on='key') print(merged_df)
В данном примере мы создали два датафрейма df1 и df2 с общим столбцом ‘key’. Затем мы использовали метод merge() для объединения датафреймов по столбцу ‘key’. Результат объединения был сохранен в переменную merged_df. Затем мы вывели объединенный датафрейм.
Метод concat()
Метод concat() позволяет объединять датафреймы вдоль оси (строки или столбцы). Он прост в использовании, но требует, чтобы датафреймы имели одинаковую структуру (одинаковые столбцы). Пример использования метода concat() для объединения двух датафреймов:
import pandas as pd # Создание первого датафрейма df1 = pd.DataFrame() # Создание второго датафрейма df2 = pd.DataFrame() # Объединение датафреймов вдоль оси строк concatenated_df = pd.concat([df1, df2]) print(concatenated_df)
В этом примере мы создали два датафрейма df1 и df2 с одинаковыми столбцами ‘A’ и ‘B’. Затем мы использовали метод concat() для объединения датафреймов вдоль оси строк. Результат объединения был сохранен в переменной concatenated_df. Затем мы вывели объединенный датафрейм.
Выбор подходящего метода
Выбор между методами merge() и concat() зависит от требований вашей задачи. Если вам нужно объединить данные на основе ключей или выполнить подобные операции, то метод merge() является предпочтительным. Если вам нужно просто объединить датафреймы без сложных преобразований, то метод concat() может быть более удобным. Важно отметить, что в pandas есть и другие методы для объединения датафреймов, такие как join() и append(), которые также могут быть полезны в разных ситуациях. Рекомендуется обратиться к официальной документации pandas для получения более подробной информации об этих методах.
Как объединить два датафрейма?
Можно ли как-то к df прибавить (желательно сверху) датафрейм a?
df.loc[len(df)]=a.loc[0].copy() не работает
- Вопрос задан более трёх лет назад
- 31200 просмотров
Комментировать
Решения вопроса 1
yay ✌️ t.me/kshnkvn
Попробуйте:
new_df = pd.concat([df1, df2])
Только так индексы продублируются, т.е. будут 0, 1, 2, 3, 0, 1.
Если так не нужно, то можно добавить параметр ignore_index=True в concat()
Еще вы можете разделить фреймы ключевыми словами добавив параметр keys=[‘df_1’, ‘df_2’]
Ответ написан более трёх лет назад
Нравится 1 4 комментария
Sergey3030 @Sergey3030 Автор вопроса
получается
1.09534013e+000 NaN 1.38208598e-001 NaN -9.28272400e-003 NaN 1.22387366e+003 NaN 0 1.095340 1 0.138209 2 -0.009283 3 1223.873660 Name: 451, dtype: float64
А мне надо
1.09534013e+000 1.095340 1.38208598e-001 0.138209 -9.28272400e-003 -0.009283 1.22387366e+003 1223.873660 Name: 451, dtype: float64
Sergey3030, вы можете нормально написать структуру первого фрейма, второго и желательный результат, примерно так:
df_1: a | b | c | d ------------ 0 | 1 | 0 | 0
df_2: e | f | g --------- 0 | 1 | 0
oupt: a | b | c | d | e | f | g ------------------------ 0 | 1 | 0 | 0 | 0 | 1 | 0