当我注意到包含不确定值的列之一(例如 3.23 +/- 0.01)存在差异时,我从 .csv 文件中获取一些数据并将其放入 Python 脚本中的字典中。构建新表并将结果导出到 Excel 后,该列不会按数字排序 - 只有第一个值被视为数字,而其余值被视为表达式。
我怀疑这可能与以下事实有关:当我第一次读取 .csv 文件时,它是用“rU”读取的(读取通用字符,而不是读取二进制的“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/ ),但我不确定如何使用它以使不确定性表达式被视为可以按降序排列的 float 。我发布了一种可以使用下面的 Sympy 包创建不确定性表达式的方法。
from uncertainties import ufloat
x = ufloat(1, 0.1) # x = 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']
我是一名优秀的程序员,十分优秀!