Как перевести значения UNIXTIMESTAMP в дату?
Есть DataFrame который содержит дату в UNIXTIMESTAMP.
Как перевести значение, если они превышают допустимое значение стандартных функций Pandas?
df = pd.DataFrame({'DATETIME': [96028070400000,10967555200000,1567555200000,-1167555200000]})
Пробовал to_datetime, падает с ошибкой:
df['DATETIME'] = pd.to_datetime(df['DATETIME'], unit='ms')
Пробовал to_timedelta, неправильно переводит первый элемент:
df['DATETIME'] = pd.to_timedelta(df['DATETIME'], unit='ms') + pd.Timestamp('1970-01-01')
Должно получится примерно так:
df = pd.DataFrame({'DATETIME': [5013-01-04,2317-07-20,2019-09-04,1933-01-01]})
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Возможно у вас UNIXTIMESTAMP в микросекундах?
In [155]: pd.to_datetime(df['DATETIME'], unit='us')
Out[155]:
0 1973-01-16 10:27:50.400
1 1970-05-07 22:32:35.200
2 1970-01-19 03:25:55.200
3 1969-12-18 11:40:44.800
Name: DATETIME, dtype: datetime64[ns]
или в наносекундах:
In [160]: pd.to_datetime(df['DATETIME'], unit='ns')
Out[160]:
0 1970-01-02 02:40:28.070400
1 1970-01-01 03:02:47.555200
2 1970-01-01 00:26:07.555200
3 1969-12-31 23:40:32.444800
Name: DATETIME, dtype: datetime64[ns]
Автор решения: MaxU
→ Ссылка
Можно воспользоваться типом данных period[D]:
df["date"] = (df["DATETIME"]
.div(1000)
.apply(lambda x: pd.Period(DT.utcfromtimestamp(x)
.strftime("%Y-%m-%d"))))
Результат:
In [189]: df
Out[189]:
DATETIME date
0 96028070400000 5013-01-04
1 10967555200000 2317-07-20
2 1567555200000 2019-09-04
3 -1167555200000 1933-01-01
Арифметика с датами работает с этим типом данных:
In [190]: df["date"] + pd.offsets.Day(1)
Out[190]:
0 5013-01-05
1 2317-07-21
2 2019-09-05
3 1933-01-02
Name: date, dtype: period[D]
In [191]: df.dtypes
Out[191]:
DATETIME int64
date period[D]
dtype: object