Если дата разного формата, как извлечь год?
Есть фрейм со столбцом bdate. Строки могут принимать значения:
- Unfiled_bdate
- dd.mm
- dd.mm.yyyy
- yyyy
Задача, в столбце получить год (если он указан), а в ином случая - значение 'Unfiled_bdate'.
Пробовал убирать точки, чтобы потом int значения по условию заменить на нужные, но не вышло.
Подскажите, как это эффективно реализовать (будет более 10КК строк)?
Текущие данные:
import pandas as pd
bdate = ['7.10', 'Unfiled_bdate', '23.3', '22.7.1985', '10.5.1994', '10.9.1959', '14.04.2021', '1.1.1987',
'5.1.2005', '19.06.2021', '17.5.1997', '4.7.2000', '31.12.2006', '28.12.2006', '25.2.1998, 2.6',
'10.8.1994', 'Unfiled_bdate', '1954', '1999'] #несколько текщих строк данных
df = pd.DataFrame()
df['bdate'] = bdate # текущий датафрейм
То, что хочу получить:
bdate_clear = ['Unfiled_bdate', 'Unfiled_bdate', 'Unfiled_bdate', '1985', '1994', '1959', '2021', '1987',
'2005', '2021', '1997', '2000', '2006', '2006', '1998', 'Unfiled_bdate',
'1994', 'Unfiled_bdate', '1954', '1999']
df_clear = pd.DataFrame()
df_clear['bdate'] = bdate_clear # желаемый результат
Ответы (2 шт):
Автор решения: Jack_oS
→ Ссылка
Без pandas и не в одну строку, но рабочее решение для ваших входных данных:
bdate = ['7.10', 'Unfiled_bdate', '23.3', '22.7.1985', '10.5.1994', '10.9.1959', '14.04.2021', '1.1.1987', '5.1.2005', '19.06.2021', '17.5.1997', '4.7.2000', '31.12.2006', '28.12.2006', '25.2.1998', '2.6', '10.8.1994', 'Unfiled_bdate', '1954', '1999']
def year_search(el):
for e in el.split('.'):
if len(e) == 4:
return e
return 'Unfiled_bdate'
bdate_clear = [year_search(b) for b in bdate]
в bdate_clear будет:
>>> bdate_clear
['Unfiled_bdate', 'Unfiled_bdate', 'Unfiled_bdate', '1985', '1994', '1959', '2021', '1987', '2005', '2021', '1997', '2000', '2006', '2006', '1998', 'Unfiled_bdate', '1994', 'Unfiled_bdate', '1954', '1999']
Автор решения: MaxU
→ Ссылка
Воспользуйтесь Series.str.extract():
df["year"] = df["bdate"].str.extract(r"\b(\d{4})\b").fillna("Unfiled_bdate")
результат:
In [20]: df
Out[20]:
bdate year
0 7.10 Unfiled_bdate
1 Unfiled_bdate Unfiled_bdate
2 23.3 Unfiled_bdate
3 22.7.1985 1985
4 10.5.1994 1994
5 10.9.1959 1959
6 14.04.2021 2021
7 1.1.1987 1987
8 5.1.2005 2005
9 19.06.2021 2021
10 17.5.1997 1997
11 4.7.2000 2000
12 31.12.2006 2006
13 28.12.2006 2006
14 25.2.1998, 2.6 1998
15 10.8.1994 1994
16 Unfiled_bdate Unfiled_bdate
17 1954 1954
18 1999 1999