Pandas / read_csv / ValueError / could not convert string to float: '49,085'

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
NinoBaumann
User
Beiträge: 67
Registriert: Samstag 25. April 2020, 19:03

Hallo,

ich lese eine csv Datei über eine URL Adresse ein. Beim Großteil der Daten handelt es sich um ganze Zahlen, also Integer. Natürlich könnte ich jetzt nach dtype= alle Header aufführen und individuell den Datentyp zuweisen. Da ich mir jedoch Codezeilen sparen möchte habe ich es wie in folgendem Codeabschnitt gemacht. Ich sage: "mach mir alles zu int64 und konvertiere (converters) mir nachfolgende Spalten zu den Datentypen die ich individuell angegeben habe".

Code: Alles auswählen

dfData = pd.read_csv(URL, parse_dates=["ANGELEGT_AM"],  dtype='int64', converters={'ANGELEGT_AM': str, 'ARBEITSPLATZ': str, 'MATERIALNUMMER': str, 'AUFTRAG': str, 'FETTGEWICHT': float, 'FETTTEMPERATUR': float}, dayfirst=True, decimal=",")
Wenn ich diesen Codeabschnitt:

Code: Alles auswählen

'ANGELEGT_AM': str, 'ARBEITSPLATZ': str, 'MATERIALNUMMER': str, 'AUFTRAG': str, 'FETTGEWICHT': float, 'FETTTEMPERATUR': float
hinter dtype= schreibe funktioniert der Code und macht mir aus FETTGEWICHT und FETTTEMPERATUR einen float, obwohl das Dezimaltrennzeichen ein Komma ist. Ich habe in der Funktion ja auch angegeben

Code: Alles auswählen

decimal=","
Wenn ich den Codeabschnitt jedoch so wie oben schreibe:

Code: Alles auswählen

dtype='int64', converters={'ANGELEGT_AM': str, 'ARBEITSPLATZ': str, 'MATERIALNUMMER': str, 'AUFTRAG': str, 'FETTGEWICHT': float, 'FETTTEMPERATUR': float}
bekomme ich einen

Code: Alles auswählen

ValueError: could not convert string to float: '49,085'
Kann mir jemand helfen?
Danke!
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@NinoBaumann: Wenn Du explizit eine Konvertierfunktion angibst, dann wird diese Funktion halt auch genommen. Und `float()` funktioniert so wie `float()` halt funktioniert, also nicht mit "," als Dezimalbruchtrennzeichen. Ich würde es ja ganz sein lassen beziehungsweise nur dort Typen/Konverter angeben, wo es wirklich notwendig ist, weil es nicht automatisch richtig erkannt wird.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
NinoBaumann
User
Beiträge: 67
Registriert: Samstag 25. April 2020, 19:03

__blackjack__ hat geschrieben: Montag 20. März 2023, 15:13 @NinoBaumann: Wenn Du explizit eine Konvertierfunktion angibst, dann wird diese Funktion halt auch genommen. Und `float()` funktioniert so wie `float()` halt funktioniert, also nicht mit "," als Dezimalbruchtrennzeichen. Ich würde es ja ganz sein lassen beziehungsweise nur dort Typen/Konverter angeben, wo es wirklich notwendig ist, weil es nicht automatisch richtig erkannt wird.
Okay. Danke für die Rückmeldung.
Antworten