Python实现含括号列拆分:提取内外内容及生成预处理列
Python处理数据集code列的拆分与格式化
核心实现代码
我们可以借助pandas库结合正则表达式完成需求,以下是完整代码:
import pandas as pd import re # 构造示例数据集 data = { 'id': [1, 2, 3], 'code': ['-(83C24H)', '30(30C14H)', '25'] } df = pd.DataFrame(data) # 拆分outside和inside列 def split_code(code): match = re.match(r'^(.*?)\((.*?)\)$', code) if match: return match.group(1), match.group(2) else: return code, '0' df[['outside', 'inside']] = df['code'].apply(lambda x: pd.Series(split_code(x))) # 生成prepared列 def format_prepared(inside): if inside == '0': return '0' # 在数字前的字母后添加+分隔符 return re.sub(r'([A-Za-z])(?=\d)', r'\1 + ', inside) df['prepared'] = df['inside'].apply(format_prepared) print(df)
代码说明
- 拆分括号内容:用正则表达式
^(.*?)\((.*?)\)$匹配带括号的结构,捕获括号前后的内容;无括号时直接返回原内容和0。 - 格式化prepared列:用正则表达式
([A-Za-z])(?=\d)定位数字前的字母,替换为字母 +的格式;若inside为0,则直接返回0。
运行结果
| id | code | outside | inside | prepared |
|---|---|---|---|---|
| 1 | -(83C24H) | - | 83C24H | 83C + 24H |
| 2 | 30(30C14H) | 30 | 30C14H | 30C + 14H |
| 3 | 25 | 25 | 0 | 0 |
内容的提问来源于stack exchange,提问作者Jresearcher
相关产品推荐
相关产品推荐

