Combiner les deux pandas de Trames de Données (jointure sur une colonne commune)
J'ai 2 dataframes:
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)`
et
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)
Je voudrais me joindre à ces deux DataFrames pour en faire un seul dataframe à l'aide de la DataFrame.join() de la commande dans les pandas.
J'ai essayé la ligne de code suivante:
#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')
Mais quand j'ai essayer ce que j'obtiens l'erreur suivante:
Exception: columns overlap: Index([business_id, stars, type], dtype=object)
Je suis très nouveau pour les pandas et n'ont aucune idée de ce que je fais de mal aussi loin que l'exécution de l'instruction de jointure est concerné.
toute aide serait grandement appréciée.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser de fusion de combiner deux dataframes en un seul:
où sur spécifie le nom du champ qui existe dans les deux dataframes à rejoindre, et comment
définit si son intérieur/à l'extérieur/à gauche/à droite rejoindre, avec l'aide de 'union des clés à partir de deux images (SQL: full outer join).' Puisque vous avez "star" de la colonne dans les deux dataframes, ce par défaut va créer deux colonnes star_x et star_y dans le combiné dataframe. Comme @DanAllan mentionné pour la méthode join, vous pouvez modifier les suffixes pour les fusionner en le passant comme un kwarg. Par défaut est
suffixes=('_x', '_y')
. si vous vouliez faire quelque chose commestar_restaurant_id
etstar_restaurant_review
, vous pouvez le faire:Les paramètres sont expliqués en détail dans ce lien.
Rejoindre échoue si le DataFrames avez quelques noms de colonne de la commune. La façon la plus simple de contourner cela est d'inclure une
lsuffix
oursuffix
mot-clé comme:De cette façon, les colonnes ont des noms distincts. La documentation les adresses de ce problème très.
Ou, vous pouvez contourner ce problème en supprimant simplement la délinquance des colonnes avant de vous rejoindre. Si, par exemple, les étoiles dans
restaurant_ids_dataframe
sont redondantes les étoiles dansrestaurant_review_frame
, vous pourriezdel restaurant_ids_dataframe['stars']
.Dans le cas où quelqu'un a besoin de l'essayer et de fusionner les deux dataframes ensemble sur l'index (au lieu d'une autre colonne), cela fonctionne aussi!
T1 et T2 sont dataframes qui ont les mêmes indices
P. S. j'ai eu à utiliser de fusion, car ajouter serait de remplir NaNs inutilement.