如何将字符串 - 1 year 6 mon 转换为数字 1.5?

How do I convert a string - 1year 6mon to an number 1.5?

我有 2 列,其中数据以 '1yrs 6mon' 格式存储,具有多个年月值排列。如何将其转换为 'total number of years' 或 'total number of months' in python?

我研究过如何做到这一点,但找不到任何建议

预期输出如下所示 1yrs 6mon 可以是 1.5 年或 18 个月 0yrs 7mon 可以是 0.58 年或 7 个月

您可以使用 pandas 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

另一种方法是在 Series 上使用 findallTransformapplydf

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

定义自定义函数以与 df 上的 apply 一起使用。此函数使用 findall 并转换为 return 系列年份

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