<p>试试这个:</p>
<pre class="lang-python prettyprint-override"><code>import pandas as pd
df = pd.read_table("path/to/your_file.txt", delimiter=" ", header=None)
df.rename(columns={0: "atom", 1:"value"}, inplace=True)
>>> df
Out[1]:
atom value
0 3.H5 5.40077
1 2.H8 7.75894
2 3.H6 7.60437
3 3.H5 5.40001
4 5.H5 5.70502
5 5.H6 7.96472
6 NaN NaN
7 NaN NaN
8 6.H6 7.96178
9 6.H5 5.71068
>>> df.groupby('atom').value.mean()
Out[2]:
atom
2.H8 7.75894
3.H5 5.40039
3.H6 7.60437
5.H5 5.70502
5.H6 7.96472
6.H5 5.71068
6.H6 7.96178
Name: value, dtype: float64
</code></pre>
<p>请注意,此代码期望您的文件只包含表,而不包含头或其他任何内容。你知道吗</p>
<p>如果要提取特定值:</p>
<pre class="lang-python prettyprint-override"><code>ppm = df.where(df.atom == "3.H5").value.dropna()
peakAvg = ppm.mean()
</code></pre>
<p>但是您可能应该更改您的函数以添加<code>peakAvg</code>作为参数,这样您就可以将值传递给函数。你知道吗</p>
<pre class="lang-python prettyprint-override"><code>def getQMulti(ppm, peakAvg, errorLim):
x = (ppm-peakAvg)/errorLim
q = getQ(x)
x0=2.0
q0=getQ(x0)
QMulti = 1.0+(q/math.abs(q0))
return QMulti
</code></pre>
<hr/>
<p><strong>编辑:</strong></p>
<p>为了在所有值上迭代应用函数,如下所示:</p>
<pre class="lang-python prettyprint-override"><code>for atom in df.atom.unique() # iterate over all atoms
ppm = df.where(df.atom == atom).value.dropna()
peakAvg = ppm.mean()
# Run your function here
</code></pre>
<p>但是请注意,您的函数必须处理类似数组的结构,因此您可能必须使用<code>numpy</code>而不是<code>math</code>来实现它。你知道吗</p>