Pandas列中化学公式分隔符处理错误排查及正确实现
问题分析与解决方法
你的代码存在的问题
- 正则表达式错误:
re.split("-,@,/", formula)写法错误,这个正则会匹配字符串-,@,/而非单个的-、@、/,正确的匹配方式应该用字符类[-/@],表示匹配这三个字符中的任意一个。 - 列赋值逻辑错误:循环中每次执行
df['Core'] = comp1会把整个列的所有值覆盖为当前的comp1,最终整个列只会保留最后一次循环的结果;如果最后一个公式是纯字母数字,comp1未被赋值,就会导致整列为空。 - 冗余循环逻辑:
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
相关产品推荐
相关产品推荐

