我有一个从中读取的文本文件,我创建了两个变量ppm
和peakAvg
。peakAvg
是我想重用的变量,它是在循环中定义的。这是我的密码:
df2 = pd.read_table(expAtoms,delimiter = " ", header = None)
df2.rename(columns={0:"atom",1:"value"}, inplace=True)
df2.groupby('atom').value.mean()
for atom in df2.atom.unique():
ppm = df2.where(df2.atom==atom).value.dropna()
peakAvg = ppm.mean()
getQMulti(ppm,peakAvg,errorLim)
获取peakAvg的方法是从文本文件读入,获取特定的值(这就是ppm
)。根据这些值,我按名称对它们进行分组(这就是atom
)。但是,peakAvg
是通过取所有ppm值(即数字)并按组取其平均值(atom
)生成的
变量peakAvg
看起来像这样(即:如果我打印peakAvg
的值,它看起来像这样):(这只是一个片段,但最后一个数字是列表中实际的最后一个数字)
5.14823
7.70533666667
5.69855333333
7.5981
5.79998333333
8.09575666667
7.4699025
7.60002
在上面的循环中,我调用我的函数getQMulti
我想将我的变量peakAvg
用于我创建的另一个名为getQPred
的函数。这就是我的第二个循环(我称之为getQPred
)的样子:
for atom2 in df3.atom2.unique():
ppm2=df3.where(df3.atom2==atom2).value2.dropna()
getQPred(ppm2,peakAvg)
现在如果我打印出peakAvg
是什么,我只得到一个数字的列表(这只是一个片段,但整个列表就是这个数字):
7.60002
7.60002
7.60002
7.60002
7.60002
7.60002
7.60002
7.60002
我怎样才能使我的peakAvg
变量成为它以前的样子(即:我拥有的第一个数字列表),因为现在我调用我的函数getQPred
时得到的结果不准确。你知道吗
编辑:以下是我正在使用的函数:
SQRT2 = math.sqrt(2.0)
ERRMUL=2.0
errorLim = 0.3
sigma = 0.5
def getQ(x):
q = np.log(1.0-erf(np.absolute(x)/SQRT2))
return q
def getQMulti(ppm,peakAvg,errorLim):
x=(ppm-peakAvg)/errorLim
q= getQ(x)
x0 = 2.0
q0 = getQ(x0)
QMulti = 1.0+(q/np.absolute(q0))
return QMulti
def getQPred(ppm,peakAvg):
x = (ppm-peakAvg)/sigma
q = getQ(x)
x0 = 1.5
q0 = getQ(x0)
QPred = 1.0+(q/np.absolute(q0))
return QPred
在您的代码中,
peakAvg
不是一个列表,它是一个值,每次通过循环都会更改。你知道吗方法如下:
也就是说,首先将
peakAvg_List
初始化为空列表,然后每次通过该列表时,append
将peakAvg
的新值初始化为该列表。这样,peakAvg_list
就包含了你想要的东西的整个列表,如果你想要的话,你可以return
。你知道吗如果要对列表做进一步的操作,可以执行另一个循环:
但是您需要弄清楚这段代码的最终输出/目标应该是什么。你想要一个你正在计算的所有
QPred
数量的列表吗?或者你需要把它们收集成一个单一的数字?这里的答案取决于您实际要做什么,这与Python语法是分开的。。。你知道吗另外,如果您对在各种列表的所有元素上执行相同的操作感兴趣,那么您应该了解numpy。(更一般地说,您可能需要了解Python中的列表和循环,它们是非常基本的概念,因此您可能需要从官方的Python tutorial之类的内容开始。你知道吗
相关问题 更多 >
编程相关推荐