我从.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
答案 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']