如何将字符串 - 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 上使用 findall
、Transform
和 apply
到 df
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
我有 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 上使用 findall
、Transform
和 apply
到 df
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