pandas结合正则生成计算列时行匹配结果拼接异常如何解决?
错误原因
你之前的写法中str(df['part'])是将整个part列的Series对象转为打印用的格式化字符串,包含了所有行的取值、列名、数据类型等全部信息,因此正则匹配会提取到所有行符合条件的字符,最终得到的是全局拼接结果,而非逐行计算的结果。
解决方法
方法1:使用apply逐行处理(逻辑和你单字符串测试完全一致,写法简单)
直接对part列的每个值单独应用你之前的正则逻辑即可:
import re import pandas as pd # 写法1:单独定义处理函数 def parse_group(part_val): return "-".join(re.findall(r'[A-Za-z]{2,}', part_val)) df['group'] = df['part'].apply(parse_group) # 写法2:用lambda简化代码 # df['group'] = df['part'].apply(lambda x: "-".join(re.findall(r'[A-Za-z]{2,}', x)))
方法2:使用pandas原生字符串方法(性能更高,适合大数据量场景)
用pandas自带的str.extractall批量匹配所有符合规则的子串,再按行拼接:
df['group'] = df['part'].str.extractall(r'([A-Za-z]{2,})').groupby(level=0).agg('-'.join)
最终输出效果
针对你给出的样例数据,两种方法都可以得到预期结果:
| part | unit_price | group | |
|---|---|---|---|
| 0 | 24C-435-SA | 10 | SA |
| 1 | 30C-435-SB | 20 | SB |
| 2 | 36C-435-SC | 30 | SC |
| 3 | 42C-435-SD | 40 | SD |
内容的提问来源于stack exchange,提问作者Shreko
相关产品推荐
相关产品推荐

