#python #pandas #datetime #dataframe #data-conversion
#python #pandas #datetime #фрейм данных #преобразование данных
Вопрос:
Рассмотрим код python panda как
datetest = pd.DataFrame({'year':['02','08',23,32,43,68,70,72,85,94]})
newdate = pd.to_datetime(datetest['year'], format='%y')
print(newdate)
Вывод:
0 2002-01-01
1 2008-01-01
2 2023-01-01
3 2032-01-01
4 2043-01-01
5 2068-01-01
6 1970-01-01
7 1972-01-01
8 1985-01-01
9 1994-01-01
Name: year, dtype: datetime64[ns]
Итак, как я могу преобразовать 2023, 2032, 2043, 2068 в 1923, 1932, 1943, 1968 соответственно, сохраняя формат даты и времени без изменений?
Комментарии:
1. как насчет предварительной обработки данных для использования четырехзначных лет, тогда не было бы никакой двусмысленности?
2. @SamMason Да, это можно сделать, но данные сложнее, чем это, а также потребуется больше манипуляций со строками. Поэтому я искал более чистое решение
Ответ №1:
Вы могли бы использовать логическую индексацию и pandas.DateOffset
корректировать любые даты в будущем на 100 лет.
Если это правило слишком строгое, вы можете установить свой собственный порог приемлемого года:
year = pd.datetime.today().year
# If setting your own threshold year eg.
# year = 2030
newdate.loc[newdate.dt.year.gt(year)] -= pd.DateOffset(years=100)
[выход]
0 2002-01-01
1 2008-01-01
2 1923-01-01
3 1932-01-01
4 1943-01-01
5 1968-01-01
6 1970-01-01
7 1972-01-01
8 1985-01-01
9 1994-01-01
Name: year, dtype: datetime64[ns]
Комментарии:
1. Спасибо, @Chris A