如何将字符串 - 1年6个月转换为数字1.5?

问题描述 投票:1回答:2

我有2列,其中数据以“1yrs 6mon”格式存储,具有多个年和月值的排列。如何将其转换为python中的“总年数”或“总月数”?

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

预期产量可能看起来像下面1年6月可以是1。5年或18个月0年7月可以是0。58年或7个月

python-3.x string pandas integer analytics
2个回答
2
投票

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

0
投票

另一种方式是使用findallTransform系列和applydf

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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.