Как проверить тип значения при конвертации timestamp в дату
Конвертирую timestamp в date, как оказалось во frame могут попасться уже даты
Пример
df = pd.DataFrame({'LAST_DATE': [274696742000, -1301790829000, None, -9544861678232, 8960604955000, pd.Timestamp(1990, 1, 1, 12)]})
Конвертирую так
df["LAST_DATE"] = (df["LAST_DATE"].div(1000).apply(lambda x: (datetime.datetime.utcfromtimestamp(x) if pd.notna(x) else np.nan)))
Должно получится
out: [1978-09-15 08:39:02, 1928-09-30 23:26:11, nan, 1667-07-15 01:32:01.768000, 2253-12-13 16:55:55, 2017-01-01 12:00:00]
Знаю что есть проверка на тип if isinstance(x, int) но куда правильно воткнуть не понимаю
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Ну, видимо, так, если подумать и правильно расставить условия и вычисления:
df["LAST_DATE"] = df["LAST_DATE"].apply(lambda x: datetime.datetime.utcfromtimestamp(x/1000) if isinstance(x, int) else x or pd.NA)
- Делим на 1000 только в случае, если попался
timestamp, а не всё подряд - Собственно
timestampопределяем черезisinstance(x, int) Noneобрабатываем с помощью трюка сx or pd.NA- правая часть выражения подставится, только если левая часть ложна, в вашем случае это будет если встретитсяNone
Я тут подставил pd.NA, поскольку это родной NaN для Pandas, но вы можете использовать и np.nan, разницы особой нет на самом деле.
Вместо трюка с or можно было использовать ещё один тернарный оператор x if x else pd.NA, но через or тоже самое получается в два раза короче.