将以1/8格式编写的文本转换为python中的数字/数字

时间:2015-07-05 08:10:55

标签: python

我的文字有这种格式的数字

"SEP15    1032'0    1040'6    1022'4    1029'0    1031'4    -1'2        9290     1032'6       13361       27522"

数字表示第8个分数,即1040'6实际上意味着1040 6/8,即1040.75,-1'2是-1.25 在将它们放入pandas数据帧之前,我很难编写一个转换它的函数。

3 个答案:

答案 0 :(得分:1)

lambda函数的替换部分中使用re.sub或匿名函数。

>>> s = "SEP15    1032'0    1040'6    1022'4    1029'0    1031'4    -1'2        9290     1032'6       13361       27522"
>>> re.sub(r"\b(\d+)'(\d+)\b", lambda m: str(float(m.group(1))+(float(m.group(2))/8)), s)
'SEP15    1032.0    1040.75    1022.5    1029.0    1031.5    -1.25        9290     1032.75       13361       27522'

答案 1 :(得分:1)

尝试这样的事情 -

def conv_to_frac(num_str):
    if "'" in num_str:
        n_split = num_str.split("'")
        #Getting only the fractional part out
        frac = str(int(n_split[1])/8.0).split(".")[1]
        num_str = n_split[0] + "." + str(frac)
    return num_str

>>> conv_to_frac("1040'6")
'1040.75'
>>> conv_to_frac("-1'2")
'-1.25'

答案 2 :(得分:1)

你可以通过拆分文本来循环你的数字,然后再用一个引号拆分数字,只需转换小数部分并添加整数部分:

>>> s="SEP15    1032'0    1040'6    1022'4    1029'0    1031'4    -1'2        9290     1032'6       13361       27522"
>>> 
>>> [int(i)+float(j)/8 for i,j in [i.split("'") if "'" in i else [i,'0'] for i in s.split()[1:]]]
[1032.0, 1040.75, 1022.5, 1029.0, 1031.5, -0.75, 9290.0, 1032.75, 13361.0, 27522.0]
>>>