Tengo 2 marcos de datos:
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)`
y
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)
Me gustaría unir estos dos DataFrames para convertirlos en un solo marco de datos usando el comando DataFrame.join () en pandas.
He probado la siguiente línea de código:
#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')
Pero cuando intento esto, aparece el siguiente error:
Exception: columns overlap: Index([business_id, stars, type], dtype=object)
Soy muy nuevo en pandas y no tengo ni idea de lo que estoy haciendo mal en lo que respecta a la ejecución de la declaración de unión.
cualquier ayuda sería muy apreciada.
Respuestas:
Puede usar la combinación para combinar dos marcos de datos en uno:
import pandas as pd pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer')
donde en especifica el nombre del campo que existe en ambas tramas de datos para unirse a, y cómo define si el interno / externo / izquierda / derecha se unen, con el exterior mediante 'unión de las claves de ambos marcos (SQL: externa completa).' Dado que tiene la columna 'estrella' en ambos marcos de datos, esto creará de forma predeterminada dos columnas star_x y star_y en el marco de datos combinado. Como mencionó @DanAllan para el método de unión, puede modificar los sufijos para fusionar pasándolo como kwarg. El valor predeterminado es
suffixes=('_x', '_y')
. si quisieras hacer algo comostar_restaurant_id
ystar_restaurant_review
, puedes hacer:pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer', suffixes=('_restaurant_id', '_restaurant_review'))
Los parámetros se explican en detalle en este enlace .
fuente
La unión falla si los DataFrames tienen algunos nombres de columna en común. La forma más sencilla de evitarlo es incluir una palabra clave
lsuffix
orsuffix
como esta:restaurant_review_frame.join(restaurant_ids_dataframe, on='business_id', how='left', lsuffix="_review")
De esta forma, las columnas tienen nombres distintos. La documentación aborda este mismo problema .
O bien, puede evitar esto simplemente eliminando las columnas ofensivas antes de unirse. Si, por ejemplo, las estrellas en
restaurant_ids_dataframe
son redundantes a las estrellas enrestaurant_review_frame
, podría hacerlodel restaurant_ids_dataframe['stars']
.fuente
En caso de que alguien necesite intentar fusionar dos marcos de datos en el índice (en lugar de otra columna), ¡esto también funciona!
T1 y T2 son marcos de datos que tienen los mismos índices
import pandas as pd T1 = pd.merge(T1, T2, on=T1.index, how='outer')
PD: tuve que usar merge porque append llenaría los NaN innecesariamente.
fuente