如何从DataFrame字符串列解析多组数据至独立列?正则匹配求助
解决方案:匹配含x/X的模式并拆分DataFrame列
核心正则表达式
使用以下正则可覆盖所有需求场景:
(\d+)\s*[xX]\s*(\d+)(.*)
各分组说明:
(\d+):捕获x/X左侧的连续数字\s*[xX]\s*:匹配小写x或大写X,两侧允许任意数量的空格(包括无空格的情况)(\d+):捕获x/X右侧的连续数字(.*):捕获右侧数字之后的所有剩余字符(无剩余则为空,后续可转为NaN)
输入输出示例
输入DataFrame:
| column_pattern |
|---|
| 10x20 |
| 5 X 15abc |
| 3x 45 |
| no_match_here |
| 100X300_def |
输出DataFrame:
| column_pattern | col1 | col2 | col3 |
|---|---|---|---|
| 10x20 | 10 | 20 | NaN |
| 5 X 15abc | 5 | 15 | abc |
| 3x 45 | 3 | 45 | NaN |
| no_match_here | NaN | NaN | NaN |
| 100X300_def | 100 | 300 | _def |
Pandas实现代码
import pandas as pd # 构造输入数据 df = pd.DataFrame({ 'column_pattern': [ '10x20', '5 X 15abc', '3x 45', 'no_match_here', '100X300_def' ] }) # 正则提取分组,不匹配的自动填充NaN df[['col1', 'col2', 'col3']] = df['column_pattern'].str.extract(r'(\d+)\s*[xX]\s*(\d+)(.*)') # 将col3的空字符串转为NaN(可选,根据需求调整) df['col3'] = df['col3'].replace('', pd.NA) print(df)
问题说明
你之前使用的\d+x\d+.*无法适配所有情况的原因:
- 未匹配大写
X - 未处理x/X两侧的空格(比如
5 X 15abc这种带空格的场景会匹配失败) - 没有明确分组,无法直接拆分出三列
内容的提问来源于stack exchange,提问作者Raven Smith
相关产品推荐
相关产品推荐

