我的文字有这种格式的数字
"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数据帧之前,我很难编写一个转换它的函数。
答案 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]
>>>