Как переместить границы меток времени для даты и времени в пандах (работа с историческими данными)? - PullRequest
5 голосов
/ 01 ноября 2019

Я работаю с историческими данными, и у меня есть очень старые даты, которые выходят за границы отметок времени для панд. Я консультировался с документацией Pandas Функциональность временных рядов / даты , в которой есть некоторая информация о за пределами диапазона , но из этой информации мне все еще не было ясно, что,во всяком случае, что я мог сделать, чтобы преобразовать свои данные в тип datetime.

Я также видел несколько потоков по переполнению стека на этом, но они либо просто указывают на проблему (то есть наносекунды, максимальный диапазон570 с лишним лет), или предложите установить errors = coerce, что превращает 80% моих данных в NaT с.

Можно ли превратить даты ниже нижней границы Панд по умолчанию в даты? Вот образец моих данных:

import pandas as pd

df = pd.DataFrame({'id': ['836', '655', '508', '793', '970', '1075', '1119', '969', '1166', '893'], 
                   'date': ['1671-11-25', '1669-11-22', '1666-05-15','1673-01-18','1675-05-07','1677-02-08','1678-02-08', '1675-02-15', '1678-11-28', '1673-12-23']})

1 Ответ

3 голосов
/ 01 ноября 2019

Вы можете создать дневные периоды с помощью лямбда-функции:

df['date'] = df['date'].apply(lambda x: pd.Period(x, freq='D'))

Или, как упомянуто @Erfan в комментарии (спасибо):

df['date'] = df['date'].apply(pd.Period)

print (df)
     id        date
0   836  1671-11-25
1   655  1669-11-22
2   508  1666-05-15
3   793  1673-01-18
4   970  1675-05-07
5  1075  1677-02-08
6  1119  1678-02-08
7   969  1675-02-15
8  1166  1678-11-28
9   893  1673-12-23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...