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

2024-04-20 12:47:26 发布

您现在位置: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 在我将它们放入数据帧之前,我很难编写一个函数来转换它们。你知道吗


Tags: 数据函数文本格式代表数字分数sep15
3条回答

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

>>> 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]
>>> 

试试这个-

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'

re.sub函数的替换部分使用lambda或匿名函数。你知道吗

>>> 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'

相关问题 更多 >