У меня есть столбец в моем наборе данных, который выглядит как дата в разных форматах. Иногда это только год и месяц, а иногда только год:
Дата |
---|
1 января 1980 г. |
Октябрь-74 |
17 октября |
1980,0 |
-200 |
-50 |
8 |
Я хочу извлечь только год из этого столбца. Для дат в формате «ммм-гг» я хочу предположить, что они находятся между 1921 и 2020 годами. Таким образом, мой столбец выше должен выглядеть так:
Год |
---|
1980 г. |
1974 г. |
2017 |
1980 г. |
-200 |
-50 |
8 |
Как я могу сделать это в Python? Любая помощь будет оценена по достоинству.
#here is the code for the first dataframe
data = {'date': ['1 January 1980','Oct-74', 'Oct-17', '1980.0', '-200.0', '-50']}
df= pd.DataFrame(data)
df
Попробуй это:
data = {'date': ['1 January 1980','Oct-74', 'Oct-17', '1980.0', '-200.0', '-50', '8']}
df= pd.DataFrame(data)
temp = df['date'].str.replace('[a-zA-Z]{3}-', '+').str.extract('([-+\.\d]{1,}$)')
m1 = temp[0].str.contains('\+')
temp[0] = temp[0].astype(float)
temp[0] = temp[0].where(~((m1)&(temp[0]>=21)), 1900+temp[0])
temp[0] = temp[0].where(~((m1)&(temp[0]<21)), 2000+temp[0])
Выход:
Я также отредактировал свой исходный вопрос, добавив пример, в котором дата и год могут быть равны 8, поскольку я понял, что это усложняет решение.
Проверьте ответ сейчас.
Спасибо! Единственная проблема, которую я обнаружил, заключается в том, что она не работает для случаев, например, если дата равна «8» (в этом случае я хочу, чтобы год был 8, тогда как это возвращает NaN). Насколько я понимаю, регулярное выражение в команде замены фильтрует типы дат «OCT-74». Означает ли это, что нужно изменить регулярное выражение в команде извлечения? А последующие строки, чтобы мы не добавляли 2000 или 1900 для таких строк?