Объединение двух фреймов данных pandas (объединение в общий столбец)
у меня есть 2 фрейма данных:
restaurant_ids_dataframe
Data columns (total 13 columns):
business_id 4503 non-null values
categories 4503 non-null values
city 4503 non-null values
full_address 4503 non-null values
latitude 4503 non-null values
longitude 4503 non-null values
name 4503 non-null values
neighborhoods 4503 non-null values
open 4503 non-null values
review_count 4503 non-null values
stars 4503 non-null values
state 4503 non-null values
type 4503 non-null values
dtypes: bool(1), float64(3), int64(1), object(8)`
и
restaurant_review_frame
Int64Index: 158430 entries, 0 to 229905
Data columns (total 8 columns):
business_id 158430 non-null values
date 158430 non-null values
review_id 158430 non-null values
stars 158430 non-null values
text 158430 non-null values
type 158430 non-null values
user_id 158430 non-null values
votes 158430 non-null values
dtypes: int64(1), object(7)
Я хотел бы объединить эти два фрейма данных, чтобы сделать их в один фрейм данных, используя фрейм данных.команда join () в pandas.
я попробовал следующую строку кода:
#the following line of code creates a left join of restaurant_ids_frame and restaurant_review_frame on the column 'business_id'
restaurant_review_frame.join(other=restaurant_ids_dataframe,on='business_id',how='left')
но когда я пытаюсь это, я получаю следующую ошибку:
Exception: columns overlap: Index([business_id, stars, type], dtype=object)
Я очень новичок в панд и нет подсказка, что я делаю неправильно, что касается выполнения оператора join.
любая помощь была бы очень признательна.
3 ответов
можно использовать слияние чтобы объединить два фрейма данных в один:
import pandas as pd
pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer')
здесь on указывает имя поля, которое существует в обоих фреймах данных для присоединения, и как
определяет, является ли его внутреннее/внешнее/левое/правое соединение, с внешним использованием ' объединение ключей из обоих кадров (SQL: полное внешнее соединение)."Поскольку у вас есть столбец "star" в обоих кадрах данных, это по умолчанию создаст два столбца star_x и star_y в объединенном фрейме данных. Как @DanAllan упомянутый для метода join, вы можете изменить суффиксы для merge, передав его как кварг. По умолчанию:suffixes=('_x', '_y')
. если вы хотите сделать что-то вроде star_restaurant_id
и star_restaurant_review
, вы можете сделать:
pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer', suffixes=('_restaurant_id', '_restaurant_review'))
параметры подробно объясняются в этом ссылке.
соединение не выполняется, если фреймы данных имеют общие имена столбцов. Самый простой способ обойти это-включить lsuffix
или rsuffix
ключевое слово, например:
restaurant_review_frame.join(restaurant_ids_dataframe, on='business_id', how='left', lsuffix="_review")
таким образом, столбцы имеют различные имена. Документация решает эту проблему.
или вы можете обойти это, просто удалив оскорбительные столбцы, прежде чем присоединиться. Если, например, звезды в restaurant_ids_dataframe
избыточны для звезд в restaurant_review_frame
, вы могли бы del restaurant_ids_dataframe['stars']
.
если кому-то нужно попытаться объединить два фрейма данных вместе в индексе (вместо другого столбца), это также работает!
T1 и T2-это фреймы данных с одинаковыми индексами
import pandas as pd
T1 = pd.merge(T1, T2, on=T1.index, how='outer')
P.S. Мне пришлось использовать merge, потому что append заполнит NaNs без необходимости.