我有2列,其中数据以“1yrs 6mon”格式存储,具有多个年和月值的排列。如何将其转换为python中的“总年数”或“总月数”?
我研究了如何做到这一点,但找不到任何建议
预期产量可能看起来像下面1年6月可以是1。5年或18个月0年7月可以是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
另一种方式是使用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