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

2024-10-02 18:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个功能:

    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    

Tags: columns文件函数importdfh2h1atom