我有一个正在阅读的文本文件,我创建了两个名为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
答案 0 :(得分:0)
在您的代码中,peakAvg
不是列表,它是每次循环时都会更改的单个值。
执行此操作的方法如下:
peakAvg_list = []
for something in whatever:
do_something_with_ppm
peakAvg = ppm.mean()
peakAvg_list.append(peakAvg)
do_something_with_peakAvg
即,首先将peakAvg_List
初始化为空列表,然后每次通过列表append
将新值peakAvg
添加到列表中。这样,peakAvg_list
包含您想要的所有内容列表,如果需要,您可以return
。
如果您想对列表做进一步的操作,可以再做一次循环:
for peakAvg in peakAvg_List:
x = (ppm - peakAvg)/sigma
### do something with x
但是你需要弄清楚这段代码的最终输出/目标应该是什么。您想要列出您正在计算的所有QPred
数量吗?或者你是否需要将它们收集到一个数字?这里的答案取决于您实际尝试做的事情,这与Python语法分开......
另外,鉴于您有兴趣对各种列表的所有元素执行相同的操作,您应该了解numpy。 (更一般地说,您可能需要了解Python中的列表和循环,这是非常基本的概念,因此您可能希望从官方Python tutorial开始。