Prüfen, ob Variable NaN (keine Zahl) oder ein Zeitstempel ist

Aus Meine persönliche Wissensdatenbank
Zur Navigation springen Zur Suche springen

Problem

Es gibt verschiedene Möglichkeiten, zu prüfen, ob eine Variable NaN ist (z.B. math.isnan(val). Das funktioniert wie erwartet, wenn die Variable NaN ist, ist sie jedoch nicht NaN, sondern wie in meinem Fall, ein Timestamp, tritt ein Fehler auf.

Lösung

Damit reicht eine einfache Abfrage, ob die Variable NaN ist, nicht aus. Anstatt eines ELSE-Zweiges, muss ein Fehler abgefangen werden:

def getDate(d1, d2):
    datum2=datum1=d2.strftime('%d.%m.%Y')
    try:
        if math.isnan(d1):
            datum=datum2
    except TypeError:
        datum1=d1.strftime('%d.%m.%Y')
        maske='{}{}'
        datum=maske.format(datum1, datum2)
    return datum

Obige Lösung gibt ein Datum (d2) zurück, wenn d1==NaN ist.

Ist d1 nicht NaN, gibt sie zurück d1–d2.

Pseudocode

try:
  if math.isnan(val):
    do_something
except TypeError:
  do_something_else

Tests

Getestet mit pandas.