Pandas: Merge schmeißt Fehler

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Hi,

ich versuche ein GEOPANDAS DF mit einem normalen PANDAS DF zu mergen.

Laut Doku hier: https://geopandas.org/mergingdata.html# ... %20pandas. sollte das ganz easy funktionieren.

Code: Alles auswählen

print(type(GeoP_df))

OUT: <class 'geopandas.geodataframe.GeoDataFrame'>

Code: Alles auswählen

print(type(P_df))

OUT:  <class 'pandas.core.frame.DataFrame'>
Beide haben eine column namens: plz

Code: Alles auswählen

GeoP_df= GeoP_df.merge(P_df, on='plz')

OUT: ValueError: You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat 
Was tue ich falsch? :D
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Die Meldung besagt eigentlich das du versuchst eine Spalte mit dem Typ object mit einer Spalte mit dem Typ int64 zu mergen. Das funktioniert nicht. Du musst also von einer Spalte den Typ ändern. Schau dir mal in dem Zusammenhang .astype() an.
Zuletzt geändert von Jankie am Donnerstag 18. Juni 2020, 14:55, insgesamt 1-mal geändert.
einfachTobi
User
Beiträge: 510
Registriert: Mittwoch 13. November 2019, 08:38

Ohne Kenntnis des Codes und der konkret enthaltenen Daten kann man nur raten. Ich versuchs: In einem DataFrame steckt nicht das, was du denkst. Die Fehlermeldung sagt ja schon, dass die Datentypen nicht zusammen passen. Ich tippe darauf, dass "plz" einmal Strings (= dtype "O") enthält.
Was sagen denn

Code: Alles auswählen

print(GeoP_df.plz.dtype)
print(P_df.plz.dtype)
?
Ich meine mich daran erinnern zu können dir schon mal Tipps bezüglich deiner Namen gegeben zu haben. Wenn nicht, dann war das sicher jemand anderes. Diese Namen entsprechen nicht der Konvention und sind damit schlecht gewählt.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Jo stimmt! Meine Spalte im GeoP_df war kein int sondern ein string.

Code: Alles auswählen

GeoP_df['plz'] = GeoP_df['plz'].astype(int)
hat den Fehler behoben.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

einfachTobi hat geschrieben: Donnerstag 18. Juni 2020, 14:53 (...)
Ich meine mich daran erinnern zu können dir schon mal Tipps bezüglich deiner Namen gegeben zu haben. Wenn nicht, dann war das sicher jemand anderes. Diese Namen entsprechen nicht der Konvention und sind damit schlecht gewählt.
Das kann gut sein. Versuche mich hier im Forum immer auf das Nötigste zu beschränken und nicht den ganzen Code einzupflegen.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Antworten