You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将原子计数函数整合到Python脚本处理化学CSV数据

实现CSV中分子式原子计数的功能整合

你的countAtoms函数已经能正确解析分子式并统计原子数,只需把它和Pandas的apply方法结合,就能批量填充H、C、N、O、S列的数值。以下是修改后的完整代码:

import pandas as pd
import copy
import re

df = pd.read_csv('AminoAcids.csv')

def countAtoms(string, dict={}):
    curDict = copy.copy(dict)
    # 先去除分子式中的空格,避免正则匹配异常
    string = string.strip()
    atoms = re.findall("[A-Z]{1}[a-z]*[0-9]*", string)

    for j in atoms:
        atomGroups = re.match('([A-Z]{1}[a-z]*)([0-9]*)', j)
        atom = atomGroups.group(1)
        number = atomGroups.group(2)
        try :
            curDict[atom] = curDict[atom] + int(number)
        except KeyError:
            try :
                curDict[atom] = int(number)
            except ValueError:
                curDict[atom] = 1
        except ValueError:
            curDict[atom] = curDict[atom] + 1
    return curDict

# 填充分子式和分子量列
df["Formula"] = ['C3H7NO2', 'C6H14N4O2 ','C4H8N2O3','C4H7NO4 ',
'C3H7NO2S ','C5H9NO4','C5H10N2O3','C2H5NO2 ','C6H9N3O2',
'C6H13NO2','C6H13NO2','C6H14N2O2 ','C5H11NO2S ','C9H11NO2',
'C5H9NO2 ','C3H7NO3','C4H9NO3 ','C11H12N2O2 ','C9H11NO3 ','C5H11NO2']
df["Molecular Weight"] = ['89.09','174.2','132.12',
'133.1','121.16','147.13','146.14','75.07','155.15',
'131.17','131.17','146.19','149.21','165.19','115.13',
'105.09','119.12','204.22','181.19','117.15']

# 定义解析函数,从countAtoms的结果中提取指定原子数,不存在则返回0
def get_atom_counts(formula):
    atom_dict = countAtoms(formula)
    return pd.Series([
        atom_dict.get('H', 0),
        atom_dict.get('C', 0),
        atom_dict.get('N', 0),
        atom_dict.get('O', 0),
        atom_dict.get('S', 0)
    ], index=['H', 'C', 'N', 'O', 'S'])

# 批量填充原子数列
df[['H', 'C', 'N', 'O', 'S']] = df['Formula'].apply(get_atom_counts)

# 保存并输出结果
df.to_csv("AminoAcids.csv", index=False)
print(df.to_string())

关键修改说明:

  • 给countAtoms函数加了string.strip(),处理分子式里的空格,避免正则解析出错
  • 新增get_atom_counts函数,调用countAtoms后,用dict.get()提取目标原子的数量,没有该原子时返回0
  • 用df['Formula'].apply(get_atom_counts)批量处理所有分子式,直接把结果赋值给对应的原子数列,替换原来的手动初始化0的操作

内容的提问来源于stack exchange,提问作者sabina aliyeva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:25:26