Python如何分割含空值的字符串并拆分为pandas两列
Pandas 拆分混合规则字符串列实现方案
核心逻辑是基于两类值的明确规则,用正则分别定向提取,不需要做多轮字符串拆分,兼容性好。
两类值的匹配规则:
- 两位字母编码:匹配连续2位大写英文字母
- Y/E标识:匹配独立出现的Y或E字符,避免误匹配两位编码内含的Y、E字母
完整实现代码
import pandas as pd # 原始数据 df = pd.DataFrame({ 'col1': ['AD', 'Y', 'E', 'AD E', 'WZ E'] }) # 提取两位字母编码,未匹配到填充空字符串 df['col1_new'] = df['col1'].str.extract(r'([A-Z]{2})', expand=False).fillna('') # 提取独立的Y/E标识,未匹配到填充空字符串 df['col2_new'] = df['col1'].str.extract(r'\b([YE])\b', expand=False).fillna('')
代码说明
- 正则
([A-Z]{2})会抓取字符串中出现的连续两位大写字母,适配编码单独出现、编码和标识用空格分隔的场景 - 正则
\b([YE])\b中的\b是单词边界符,保证只会抓取单独成段的Y/E,不会把两位编码(比如YE、EY)里的单个字母误识别为标识 .fillna('')会把匹配失败的缺失位置统一填充为空字符串,和预期输出格式完全一致
输出验证
运行代码后得到的结果和示例预期完全匹配:
| col1 | col1_new | col2_new |
|---|---|---|
| AD | AD | |
| Y | Y | |
| E | E | |
| AD E | AD | E |
| WZ E | WZ | E |
如果存在两类值连写无分隔的特殊场景(比如ADE代表编码AD+标识E),只需要把标识列的匹配正则调整为r'([YE])$'(匹配字符串末尾的Y/E)即可适配。
内容的提问来源于stack exchange,提问作者EconMatt
相关产品推荐
相关产品推荐

