Werte mit falschem Datentyp korrigieren

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
s.o.franz
User
Beiträge: 1
Registriert: Freitag 11. Dezember 2020, 09:48

Hallo,

ich suche nach einer Python-Funktion, die aus mit falsch angelegten Mess-/Skalenniveaus erfasste Daten in numerische Daten umwandelt.

Konkret:
Beim Anlegen eines Fragebogens wurden für Gewicht und Größe alphanumerische Eingaben zugelassen - daher gibt es Datensätze, die "ca. 60 kg" oder "1,86 m" lauten.

In SPSS lassen sich die Daten (mit Auslassen der Umcodierung unzulässiger Daten) mit dem Befehl
NUMERIC sz_cm (f3.0).
EXECUTE.
COMPUTE sz_cm=number (sz_187, F3.0).
EXECUTE.
trotzdem umwandeln.

Python ist da (mit den mir bekannten Mitteln) etwas unflexibler.

Kennt jemand eine entsprechende Funktion?

Merci

Stefan
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Das einfachste ist, mit einem regulären Ausdruck irgendwas zahlenartiges aus Deinen Strings zu ziehen.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1244
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Beim Anlegen eines Fragebogens wurden für Gewicht und Größe alphanumerische Eingaben zugelassen - daher gibt es Datensätze, die "ca. 60 kg" oder "1,86 m" lauten.
Das ist ja der absolute Horror.
Sind die Einheiten wenigstens richtig?
Jedenfalls muss das Komma durch einen Punkt ersetzt werden, um das mit float() in einen float umzuwandeln.

Ich würde erst mal so anfangen und damit über alle Einträge iterieren und warten, dass es knallt.

Code: Alles auswählen

def process_entry(text):
number, unit = text.split(maxsplit=1)
number = float(number.replace(",", "."))

return number, unit.rstrip()
Wenn jetzt z.B. jemand 80kg eingegeben hat, kommt es zu einem ValueError, da split nur noch ein Element ausgibt.
Dann stellt sich noch die Frage, was du mit Eingaben machst, die sich z.B. auf g oder cm beziehen.

Mit dem Regex würde ich erst anfangen, wenn es gar nicht anders geht.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

@DeaD_EyE: Das wird aber sehr schnell frickelig. Gerade wenn die Eingabe völlig frei möglich war, muss man dann ja irgendwann anfangen die einzelnen Elemente nach dem Split daruaf zu testen, ob sie potentiell eine Zahl sind. Und selbst das funktioniert nicht nicht mehr, wenn hinter der Zahl kein Leerzeichen ist. Dann kann man eigentlich auch direkt einen regex verwenden.

@s.o.franz: Du meinst, der Codschnipsel von dir gibt bei den Einträgen "ca. 1,98", "ca. 1.98", "ca. 198cm", "ca. 198 cm" jeweils das korrekte Ergebnis von 1,98 Metern zurück? Ich würde das anzweifeln.
Antworten