如何将英尺和英寸的分数格式转换为十进制格式?

3
我正在使用通过 Pandas 导入的数据框,其中有一列包含以英尺和英寸格式化为分数的长度值。
我想进行以下转换:
Length           Length Decimal 
0'-10 11/64"     0.85
4'- 7 19/64"     4.61
0'- 3"           0.25
62'- 3 3/4"      62.31
58'- 5 43/64"    58.47
2'-11 13/16"     2.98

我想我需要尝试将字符串的每个部分拆分并转换为十进制,然后将它们全部加在一起。我一直在使用Excel处理这个任务,所以不确定如何在Python中处理它。任何帮助都将不胜感激!


我尝试用空值替换字符串的字符,即 df['Length'].replace('-',''),但这样做不能将字符串的各个组成部分合并为一个十进制格式。是否有一个包含函数的模块可以几乎自动完成此操作? - Stephen
我的期望是需要进行多次替换来评估字符串。在这里,提问者更加受邀参与解决问题。因此,请展示出一些努力吧! - Klaus D.
当然可以!我在想是否有一种特别的、超级棒的方法来完成这个任务,而不需要执行多次“替换”。 - Stephen
1
我认为使用带有捕获组的正则表达式可能会很有帮助。 - Klaus D.
1个回答

3

您可以使用正则表达式,如@KlausD. 建议的方式,使用命名组:

df = df.assign(**df['Length'].str.extract(r"(?P<Feet>\d+)'-\s?(?P<Inches>\d+)\s?(?P<Num>\d+)?\/?(?P<Dem>\d+)?\"")\
                        .astype(float).fillna(0))
df['Length Decimal'] = df.eval("Feet + Inches / 12") + np.where(df.Num == 0,0,(df["Num"]/df["Dem"])/12)
df

输出:

          Length  Length Decimal   Dem  Feet  Inches   Num
0   0'-10 11/64"        0.847656  64.0   0.0    10.0  11.0
1   4'- 7 19/64"        4.608073  64.0   4.0     7.0  19.0
2         0'- 3"        0.250000   0.0   0.0     3.0   0.0
3    62'- 3 3/4"       62.312500   4.0  62.0     3.0   3.0
4  58'- 5 43/64"       58.472656  64.0  58.0     5.0  43.0
5   2'-11 13/16"        2.984375  16.0   2.0    11.0  13.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接