У меня в предоставленной базе есть колонка с данными о стаже вида:
'9 лет 9 месяцев 14 дней'
Я преобразовал значения во float циклом for с регуляркой:
for row in range(len(df)):
target = df['Стаж работы в организации'][row]
content = re.findall(r'\d+', target)
content[0] = float(content[0])
content[1] = (float(content[1]))/12
content[2] = ((float(content[2]))/30)/12
content = sum(content)
df['Стаж работы в организации'][row] = content
Задачу это решает конечно, хоть и не быстро, но мне кажется, что должен быть более гуманный способ, раз pandas векторизирован.
Как сделать более эффективно?
Ответ
In [180]: df
Out[180]:
work_experience
0 9 лет 9 месяцев 14 дней
1 2 года 1 месяц 3 дня
2 33 года 6 месяцев 30 дней
In [181]: df['new'] = (df['work_experience']
...: .str.extractall('(\d+)')
...: .astype(int)
...: .unstack()[0]
...: .dot([1, 1/12, 1/30/12]))
...:
In [182]: df
Out[182]:
work_experience new
0 9 лет 9 месяцев 14 дней 9.788889
1 2 года 1 месяц 3 дня 2.091667
2 33 года 6 месяцев 30 дней 33.583333
Комментариев нет:
Отправить комментарий