如何将不确定性表达式(例如3.23 +/- 0.01)从字符串转换为浮点数?

时间:2017-03-13 18:51:05

标签: python sympy

我从.csv文件中获取一些数据并将其放入我的Python脚本中的dict中,当我发现其中一个包含不确定值的列(例如3.23 +/- 0.01)存在差异时。在构建新表并将结果导出到Excel之后,此列不会以数字方式对其进行排序 - 只有第一个值被视为数字,而其余值被视为表达式。

我怀疑这可能与以下事实有关:当我第一次阅读.csv文件时,它被&r;' r读取。 (读取通用字符,而不是' rb'用于读取二进制文件)。我这样做是因为.csv文件中的原始+/-符号未被正确读取。因此,在读入.csv文件之后,它已经有了' \ xb1'作为+/-符号的占位符,我随后用' +/-'。

import csv
import re    

folder_contents={}
with open("greencandidates.csv", "rU") as csvfile:
    green= csv.reader(csvfile, dialect= 'excel')
    for line in green:
        candidate_number= line[0]
        fluorescence= line[1].replace(" \xb1 "," +/- ")
        folder_contents[candidate_number]= [fluorescence]

但是,鉴于从原始的.csv文件中处理了大量数据,我真的希望能够按降序(从最大到最小)对数据进行排序。虽然有一个模块允许创建不确定表达式(https://pythonhosted.org/uncertainties/),但我不确定如何使用它来使不确定性的表达式被视为浮点数,可以是按降序排列。我发布了一种方法,可以使用下面的Sympy包创建不确定性表达式。

from uncertainties import ufloat

x = ufloat(1, 0.1)  # x = 1+/-0.1 

1 个答案:

答案 0 :(得分:1)

使用排序中的键功能,例如:

def u_float_key(num):
    return float(num.split('+')[0])

然后你可以使用内置的甚至是字符串排序:

sorted(results, key=u_float_key, reverse=True)

>>> test = ["1+/-1", "0.2+/-0", "4+/-2", "3+/-100"]
>>> sorted(test, key=ufloatkey)
['0.2+/-0', '1+/-1', '3+/-100', '4+/-2']