Подтвердить что ты не робот

Объединение двух панд данных фреймов (объединение в общий столбец)

У меня есть 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)

Я хотел бы присоединиться к этим двум DataFrames, чтобы сделать их в единый фрейм данных, используя команду DataFrame.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)

Я очень новичок в pandas и не знаю, что я делаю не так, как при выполнении инструкции объединения.

любая помощь была бы высоко оценена.

4b9b3361

Ответ 1

Вы можете использовать merge, чтобы объединить два фрейма данных в один:

import pandas as pd
pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer')

где в указывает имя поля, которое существует в обоих файлах данных для присоединения, и , как определяет, является ли его внутреннее/внешнее/левое/правое соединение, а внешнее - "объединение ключей из обоих фреймов (SQL: полное внешнее соединение)". Поскольку у вас есть столбец "звезда" в обоих кадрах данных, по умолчанию это создаст два столбца star_x и star_y в объединенном фрейме. Как упоминал @DanAllan для метода join, вы можете изменить суффиксы для слияния, передав его как kwarg. Значение по умолчанию 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'))

Параметры подробно описаны в этой ссылке.

Ответ 2

Соединение не выполняется, если в DataFrames есть имена столбцов. Самый простой способ - включить ключевое слово 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'].

Ответ 3

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

T1 и T2 - это данные, которые имеют одинаковые индексы

import pandas as pd
T1 = pd.merge(T1, T2, on=T1.index, how='outer')

P.S. Мне пришлось использовать слияние, потому что append заполнял NaN без необходимости.