如何实现我创建的需要我从文件读入的功能?

时间:2017-08-28 15:21:21

标签: python pandas

我有这个功能:

    errorLim = 0.3
    def getQMulti(ppm,errorLim):
        x = (ppm-peakAvg)/errorLim
        q = getQ(x)
        x0=2.0
        q0=getQ(x0)
        QMulti = 1.0+(q/math.abs(q0))
        return QMulti

并且此QMulti函数使用另一个名为getQ(x)的函数,如下所示:

def getQ(x):
    q = math.log(1.0- erf(abs(x)/SQRT2))
    return q

我有一个名为expAtoms的文件,它看起来像这样:

3.H5 5.40077
3.H5 5.40001
5.H5 5.70502
4.H8 7.55438
5.H1' 5.43574
""
""
""
6.H6 7.96178
6.H5 5.71068

如何实现此功能?我目前有代码读取expAtoms的第一列,查看是否有任何值重复,然后如果有,则取平均值并将其输出到文件。

在我的功能中,我有ppm-peakAvg。我当前的代码给出了平均值,我想为我的expAtoms文件中的每个原子计算这个函数。

这是我的代码:

import pandas as pd
import os
import sys


exp = 'expAtoms.txt'

df = pd.read_csv(exp, sep = ' ', header = None)
df.columns = ["Atom","ppm"]
df = df.dropna().reset_index(drop=True)

df2 =pd.read_csv(pred, sep = r'\s+', header = None)
df2.columns = ["Atoms","ppms","error"]

gb = (df.groupby("Atom", as_index=False).agg({"ppm":["count","mean"]}).rename(columns={"count":"nVa", "mean":"avgppm"}))

gb.head()

gb.columns = gb.columns.droplevel()
gb = gb.rename(columns={"":"Atom"})
gb.merge(df2, left_on='Atom', right_on='Atoms', how='left').drop(['Atoms','ppms'], axis=1)
gb.to_csv("output.txt", sep =" ", index=False)

我希望我的输出看起来像这样,那么如何添加一个计算此QMulti函数的列?:

      Atom nVa avgppm   QMulti   
  7.H2   2      7.853    0.000    
  9.H2   2      7.458    0.000    
 20.H2   1      7.898    0.000    
 21.H2   1      8.113    0.000   
 8.H1'   2      5.238    0.002   
22.H1'   2      5.523    0.002    

0 个答案:

没有答案