Pandas merge: Error

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

Hi,

bekomme bei

Code: Alles auswählen

data5 = pd.merge(data0, data1, how='left', left_on=['Code'], right_on=['Code'])
folgenden Fehler:

Code: Alles auswählen

ValueError: You are trying to merge on int64 and object columns. If you wish to proceed you should use pd.concat
Wenn ich

Code: Alles auswählen

data1['Code'].astype(int)
eingeben, dann kommt folgender Fehler:

Code: Alles auswählen

 File "pandas/_libs/lib.pyx", line 614, in pandas._libs.lib.astype_intsafe
ValueError: invalid literal for int() with base 10: '11.06.2020'
Was kann ich tun?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
sparrow
User
Beiträge: 4506
Registriert: Freitag 17. April 2009, 10:28

Spalten von gleichen Typ mergen.
Und wieso glaubst du, man kann ein Datums-String in eine Ganzzahl casten?
Sirius3
User
Beiträge: 18220
Registriert: Sonntag 21. Oktober 2012, 17:20

Und was wundert Dich jetzt daran? Ein Datum kann nicht in eine Zahl verwandelt werden.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Ja, aber wieso kann ich den Typ nicht ändern?

Also das sind halt in beiden df 5stellige Zahlenkombinationen. Nur ist das eine halt ein anderer Datentyp, der sich nicht ändern lässt.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Sirius3
User
Beiträge: 18220
Registriert: Sonntag 21. Oktober 2012, 17:20

Ein Datum ist keine 5stellige Zahlenkombination sondern ein Datum.
Benutzeravatar
snafu
User
Beiträge: 6832
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ein Datum ist vom Typ date bzw datetime. Wenn man unbedingt eine Ganzzahl haben will, dann müsste man das Datum in einen Zeitstempel umwandeln. Bei fehlender Zeitangabe müsste man dann wohl von 0 Uhr ausgehen. Aber sinnvoll ist das in dem Zusammenhang nicht wirklich. Warum muss es denn unbedingt eine Zahl sein? Anscheinend willst du hier Dinge zusammenführen, die einfach nicht zusammenpassen. Was steht denn in der Spalte mit den Integern? Sind das auch Datumsangaben?
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Ich raff das nicht. Das ist aber kein Datum :-D

Sind beides csv-dateien die ich mit pd.read_csv(..) einlese.

Code: Alles auswählen

print(data1['Code'])

Code: Alles auswählen

0      14882
1      75014
2      37836
3      34794
4      44038
       ...  
962    57645
963    63910
964    82762
965    66175
966    18768
Name: Code, Length: 967, dtype: object


und für das andere:

Code: Alles auswählen

print(data0['Code'])

Code: Alles auswählen

0       44038
1       32504
2       93256
3       69533
4       80666
        ...  
1004    58712
1005    17905
1006    42759
1007    98340
1008    31400
Name: Code, Length: 1009, dtype: int64
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Sirius3
User
Beiträge: 18220
Registriert: Sonntag 21. Oktober 2012, 17:20

Bei `data1['Code']` steht doch eindeutig der Typ `object` und irgendwo zwischen Zeile 5 und 961 ist halt keine Zahl, sondern ein Datum.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Du hast Recht. Wow. Ich hatte ein Brett vor dem Kopf. Danke
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Antworten