Python 根据条件查找对应物质并记录

有一个config file: dfspeciesConfig,
for col in wavecolM3L:
如果wavecolM3L list中(Col-1,Col+1) 范围内在dfspeciesConfig里面能找到对应物质, 则保留此wave, 并记录相应的species (SiO/Ni),请问如何写?
image.png
wavecolM3L
image.png

2022.05.17

image.png
这里面speciesList 是pConfig返回的结果,跟您帮我写的那个是一个意思么? 但是有个报错
dfspeciesConfig 和需要与原始speciesList(config 标准表)比对的待比对物质列表

image.png
image.png
2022.05.17 18:15
就差一点点了, 运行单个inP =241.0, 查找到的物质是对的, 数据类型按您的改了,运行报错如下, 仍然提示'TypeError: 'float' object is not subscriptable:
image.png

阅读 1.6k
1 个回答

我理解,你看是否是这样的:

  1. 有一个名为dfspeciesConfig的配置文件中,记录了物质(名)和对应的物质特性值,比如Au对应的是201.2
  2. 在WaveColM3L中记录了某种测试的 物质特性值 列表
  3. 现在遍历WaveColM3L的每条记录,判断每条记录是否 对应于dfspeciesConfig 中的某个物质(特性),如果有对应的,则保留该记录,并在其后标注 对应的 物质名

其中3的比较中测试记录的物质特性值可能存在偏差,其对应的物质特性可能存在 正负1 的偏差,即如果 记录的值 在 某个配置值的正负1范围内,还是认为是对应于该物质。

如果是这样的,这其实类似一个特殊的查表过程,因为待查表是一个范围表,即首先需要对dfspeciesConfig解析,生成一个待查的范围表(注意这个表不能有重叠区域)

然后就是遍历过程,这里其实还需要明确所谓的保留是指什么,如果没有查到对应物质的要怎么处理?我觉得可能都要保留,只是对查到的多标注对应查到的物质可能更好。

这个估计是什么研究项目中的数据处理?!

根据题主新的介绍,我觉得关键有2个处理过程

  1. 就是对dfspeciesConfig预处理为一个物质特性升序排列的物质特性与物质名列表
  2. 定义一个根据物质特性查表的函数
    下面是这个的伪实现

    def takeSecond(elem):
     return elem[1]
    # 解析dfspeciesConfig,因为不知道dfspeciesConfig的具体格式,假定是2个列表
    def  pConfig(inConfig):
     # 返回一个数组,数组以物质特性升序排序,每个元素是[物质名,物质特性]
     # inConfig  一个二维数组(列表),第一层是物质特性值,第二个层是物质名
     rt=[]
     for idx  in range(len(inConfig[0]) ):
         # 根据特性从0开始,下面处理了数据类型,强制转换为浮点数
         rt.append([inConfig[1][idx], float(inConfig[0][idx])])
     rt=rt.sort(key=takeSecond)
     return rt
    
    # 下面填入正确的数据来源
    wuList=pConfig(...)
    
    def getName( inP, PList):
     rt=""
     # inP 转换为浮点数
     inP=float(inP)
     for elem in PList:
         if inP>=elem[1]-1 and inP<= elem[1]+1 :
             rt+=elem[0]+"/"
     rt=rt.str.rstrip("/")
     return rt
    
    # 开始遍历
    allOut=[]
    # 下面的变量和列表根据你实际调整
    for  X in XList :
     aName=getName(X, wuList )
     if aName  !="" :
         tList=[X]
         tList.append(aName)
         allOut.append(tList)
    # 遍历完成后allOut就是符合条件的结果,可以对其后续处理,比如输出到文件,或者显示之类。
    

    因为上述代码没有合适的数据进行验证测试,所以是伪代码,需要根据实际调整部分地方可能才能正常工作。包括但不限于列表索引关系、数据类型转换处理等。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏