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

Pandas列中化学公式分隔符处理错误排查及正确实现

问题分析与解决方法

你的代码存在的问题

  1. 正则表达式错误:re.split("-,@,/", formula) 写法错误,这个正则会匹配字符串 -,@,/ 而非单个的 -、@、/,正确的匹配方式应该用字符类 [-/@],表示匹配这三个字符中的任意一个。
  2. 列赋值逻辑错误:循环中每次执行 df['Core'] = comp1 会把整个列的所有值覆盖为当前的 comp1,最终整个列只会保留最后一次循环的结果;如果最后一个公式是纯字母数字,comp1 未被赋值,就会导致整列为空。
  3. 冗余循环逻辑:split 得到的列表直接用 ''.join(line) 就能拼接成无分隔符的字符串,完全不需要嵌套 while 和 for 循环的复杂操作。

正确的处理方法

方法一:Pandas 矢量化字符串操作(推荐,效率最高)

直接使用 str.replace 方法,逐行替换所有目标分隔符为空字符串:

import pandas as pd

# 假设df是你的DataFrame
df['Core'] = df['Core'].str.replace(r'[-/@]', '', regex=True)

这个方法会自动遍历列中每一个值,匹配 -、/、@ 中的任意一个并删除,不需要手动写循环。

方法二:使用 apply 自定义处理逻辑

如果需要更灵活的处理,可以用 apply 对每个值单独处理:

import re
import pandas as pd

def clean_formula(formula):
    # 分割后拼接,等价于删除分隔符
    return ''.join(re.split(r'[-/@]', formula))

df['Core'] = df['Core'].apply(clean_formula)

方法三:手动循环(不推荐,仅作理解用)

如果一定要用循环,必须通过索引逐行赋值,避免覆盖整列:

import re
import pandas as pd

for idx in df.index:
    formula = df.loc[idx, 'Core']
    # 分割后拼接得到无分隔符的公式
    cleaned = ''.join(re.split(r'[-/@]', formula))
    df.loc[idx, 'Core'] = cleaned

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:33:13