Страницы

Поиск по вопросам

пятница, 1 марта 2019 г.

Изменить тип str на float в pandas DataFrame

У меня в предоставленной базе есть колонка с данными о стаже вида:
'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

Комментариев нет:

Отправить комментарий