Как мне преобразовать строку - 1 год 6mon в число 1,5? - PullRequest
1 голос
/ 13 апреля 2019

У меня есть 2 столбца, в которых данные хранятся в формате «1yrs 6mon» с несколькими перестановками значений года и месяца. Как мне преобразовать это в «общее количество лет» или «общее количество месяцев» в Python?

Я исследовал, как это сделать, но не смог найти никаких предложений

Ожидаемый результат может выглядеть следующим образом 1 год 6 месяцев может быть 1,5 года или 18 месяцев 0 лет 7 месяцев может быть 0,58 года ИЛИ 7 месяцев

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

Вы можете использовать панд str.extractall и выполнить небольшую предварительную обработку.

s = pd.Series(['1 yr 6 mon', '2 yr 5 mon'])
s

0    1 yr 6 mon
1    2 yr 5 mon
dtype: object

(s.str.extractall(r'(\d+)')[0]
  .unstack()
  .astype(int)
  .set_axis(['yr', 'mon'], axis=1, inplace=False)
  .eval('yr + mon / 12'))

0    1.500000
1    2.416667
dtype: float64
0 голосов
/ 13 апреля 2019

Другим способом является использование findall, Transform в сериях и от apply до df

In [98]: df
Out[98]:
           A           B
0   1yr 6mon    0yr 7mon
1  3yrs 4mon  2yrs 5mons

Определение пользовательской функции для использования с apply на df.Эта функция использует findall и Transform для возврата серии лет

def to_yrs(s):
    return s.str.findall(r'(\d+)').transform(lambda x: int(x[0]) + int(x[1])/12)

In [99]: df.apply(to_yrs, axis=1)
Out[99]:
          A         B
0  1.500000  0.583333
1  3.333333  2.416667
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...