J'ai 2 cadres de données:
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 joindre ces deux DataFrames pour les transformer en un seul cadre de données en utilisant la commande DataFrame.join () 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 lorsque j'essaie, j'obtiens l'erreur suivante:
Exception: columns overlap: Index([business_id, stars, type], dtype=object)
Je suis très nouveau sur pandas) et je n'ai aucune idée de ce que je fais de mal en ce qui concerne l'exécution de la déclaration de jointure.
toute aide serait très appréciée.
Vous pouvez utiliser fusionner pour combiner deux images en une:
import pandas as pd
pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer')
où on spécifie le nom du champ qui existe dans les deux images à joindre, et comment définit si sa jointure interne/externe/gauche/droite, avec external utilisant "union des clés des deux cadres (SQL: jointure externe complète)". Puisque vous avez la colonne 'étoile' dans les deux cadres de données, cela créera par défaut deux colonnes étoile_x et étoile_y dans la trame de données combinée. Comme @DanAllan l'a mentionné pour la méthode join, vous pouvez modifier les suffixes pour la fusion en le passant sous la forme d'un kwarg. La valeur par défaut est suffixes=('_x', '_y')
. si vous voulez faire quelque chose comme star_restaurant_id
et star_restaurant_review
, vous pouvez faire:
pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer', suffixes=('_restaurant_id', '_restaurant_review'))
Les paramètres sont expliqués en détail dans ce lien .
La jointure échoue si les DataFrames ont des noms de colonnes en commun. Le moyen le plus simple consiste à inclure un mot clé lsuffix
ou rsuffix
comme suit:
restaurant_review_frame.join(restaurant_ids_dataframe, on='business_id', how='left', lsuffix="_review")
De cette façon, les colonnes ont des noms distincts. La documentation adresse ce problème même .
Vous pouvez également contourner ce problème en supprimant simplement les colonnes incriminées avant de vous rejoindre. Si, par exemple, les étoiles dans restaurant_ids_dataframe
sont redondants pour les étoiles dans restaurant_review_frame
, vous pourriez del restaurant_ids_dataframe['stars']
.
Au cas où quelqu'un aurait besoin d'essayer de fusionner deux images de données ensemble sur l'index (au lieu d'une autre colonne), cela fonctionne aussi!
T1 et T2 sont des trames de données qui ont les mêmes indices
import pandas as pd
T1 = pd.merge(T1, T2, on=T1.index, how='outer')
P.S. J'ai dû utiliser merge parce que append remplirait inutilement les NaN.