Ich habe einen großen Datenrahmen, der unter anderem eine (norwegische) Sozialversicherungsnummer enthält. Aus dieser Zahl kann über einen speziellen Algorithmus das Geburtsdatum ermittelt werden. Hin und wieder schleicht sich jedoch eine illegale Sozialversicherungsnummer in die Datenbank ein und verfälscht die Berechnung.
Was ich tun möchte, ist, jede Zeile mit einer ungültigen Sozialversicherungsnummer zu markieren, zusammen mit einer Protokollnachricht, die den ausgegebenen Fehler anzeigt.
Betrachten Sie das folgende, konstruierte Beispiel
%Vor%Ich möchte die folgende Ausgabe erstellen
%Vor%Ich habe es versucht
%Vor%aber das erzeugt dies
%Vor% Ich schätze das Problem ist, dass ich die date_of_birth
-Spalte in einer Operation und die Fehler in einer anderen zuweisen. Ich bin mir nicht sicher, wie man die Spalten is_in_error
und error_msg
simultan fängt und erstellt.
Dies geschieht aufgrund der Art und Weise, wie Sie den Datenrahmen füllen.
%Vor% Überschreibt tatsächlich die gesamte Spalte mit str(e)
.
Dies ist wahrscheinlich der effizienteste Weg, dies zu tun:
%Vor%Wenn Sie jedoch auch die Fehler in den Datenrahmen schreiben möchten, können Sie diesen Ansatz verwenden, obwohl er möglicherweise viel langsamer ist (es könnte schnellere Lösungen geben).
%Vor%Dies behandelt jede Zeile einzeln und schreibt den Fehler nur in den korrekten Index, anstatt die gesamte Spalte zu aktualisieren.
Sie sind im Umgang mit großen Datenmengen. Ausnahmen aus einer Schleife zu werfen ist oft nicht die beste Idee, da die Schleife normalerweise abgebrochen wird. Wie viele andere scheinen Sie das nicht zu wollen.
Um dies zu erreichen, ist es ein typischer Ansatz, eine Funktion zu verwenden, die die Ausnahme nicht auslöst, sondern stattdessen zurückgibt.
%Vor%Damit können Sie der Funktion einfach eine Liste von Werten zuordnen und erhalten die Ausnahmen (die natürlich keine Spur haben, aber in einem solchen Fall sollte das kein Problem sein) als Werte in der Ergebnisliste:
Sie können dann über die Liste gehen, die gefundenen Ausnahmen durch None
-Werte ersetzen und andere Spalten stattdessen mit der in der Ausnahme enthaltenen Nachricht füllen.
Tags und Links python error-handling pandas