Ich habe 2 Datenrahmen:
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)`
und
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)
Ich möchte diese beiden DataFrames verbinden, um sie mit dem Befehl DataFrame.join () in Pandas zu einem einzigen Datenframe zu machen.
Ich habe die folgende Codezeile ausprobiert:
#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')
Aber wenn ich das versuche, bekomme ich folgenden Fehler:
Exception: columns overlap: Index([business_id, stars, type], dtype=object)
Ich bin sehr neu in Pandas und habe keine Ahnung, was ich falsch mache, wenn es um die Ausführung der Join-Anweisung geht.
Jede Hilfe wäre sehr dankbar.
Antworten:
Mit Merge können Sie zwei Datenrahmen zu einem kombinieren:
import pandas as pd pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer')
Dabei gibt on den Feldnamen an, der in beiden Datenrahmen vorhanden ist, an denen verbunden werden soll, und wie definiert, ob der innere / äußere / linke / rechte Join mit dem äußeren "Vereinigung der Schlüssel aus beiden Frames" (SQL: vollständiger äußerer Join) verwendet wird. Da Sie in beiden Datenrahmen eine 'Stern'-Spalte haben, werden standardmäßig zwei Spalten star_x und star_y im kombinierten Datenrahmen erstellt. Wie @DanAllan für die Join-Methode erwähnt hat, können Sie die Suffixe für die Zusammenführung ändern, indem Sie sie als kwarg übergeben. Standard ist
suffixes=('_x', '_y')
. Wenn Sie so etwas wiestar_restaurant_id
und machen wolltenstar_restaurant_review
, können Sie Folgendes tun:pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer', suffixes=('_restaurant_id', '_restaurant_review'))
Die Parameter werden in diesem Link ausführlich erläutert .
quelle
Die Verknüpfung schlägt fehl, wenn die DataFrames einige Spaltennamen gemeinsam haben. Der einfachste Weg, dies zu umgehen, besteht darin, ein
lsuffix
oder einrsuffix
Schlüsselwort wie folgt einzufügen:restaurant_review_frame.join(restaurant_ids_dataframe, on='business_id', how='left', lsuffix="_review")
Auf diese Weise haben die Spalten unterschiedliche Namen. Die Dokumentation befasst sich genau mit diesem Problem .
Sie können dies auch umgehen, indem Sie einfach die fehlerhaften Spalten löschen, bevor Sie beitreten. Wenn zum Beispiel die Sterne in
restaurant_ids_dataframe
redundant zu den Sternen in sindrestaurant_review_frame
, könnten Siedel restaurant_ids_dataframe['stars']
.quelle
Falls jemand versuchen muss, zwei Datenrahmen im Index zusammenzuführen (anstelle einer anderen Spalte), funktioniert dies auch!
T1 und T2 sind Datenrahmen mit denselben Indizes
import pandas as pd T1 = pd.merge(T1, T2, on=T1.index, how='outer')
PS Ich musste Merge verwenden, da das Anhängen NaNs unnötig ausfüllen würde.
quelle