如何从车辆数据集提取车型名称?正则提取异常求助
解决DataFrame车型名称提取问题
问题分析
你之前用的正则表达式(\w+)只能匹配字母、数字和下划线,覆盖不了车型名里的连字符(-)和空格,而且会在遇到第一个非\w字符时停止匹配,所以没法正确提取WR-V、X1 xDrive20d这类特殊格式的车型名称。
解决方案
用更灵活的正则表达式,精准匹配车型名部分,同时排除后续的配置参数(比如排量、配置代码):
model_name = df['Model'].str.extract(r'^([\w\s-]+?)(?=\s+\d|\s+[A-Z]{2,}|\s+Magna|\s+G|\s*$)').str.strip()
正则说明
^:匹配字符串开头,确保从车型名起始位置提取([\w\s-]+?):捕获分组,匹配字母、数字、空格、连字符,+?用非贪婪模式,避免把配置内容也匹配进来(?=...):正向预查,遇到以下任意情况就停止匹配:\s+\d:空格后跟着数字(比如排量参数1.2)\s+[A-Z]{2,}:空格后跟着两个及以上大写字母(比如配置代码VX、VDI)\s+Magna:空格后跟着特定配置名称Magna\s+G:空格后跟着单个字母的配置标识(比如Glanza G里的G)\s*$:字符串结尾(保证WR-V、X1 xDrive20d这类无后续配置的完整车型名被全部提取)
.str.strip():去掉提取结果两端的多余空格,保证输出整洁
验证结果
针对你的样例数据,提取结果如下:
| index | 车型名称 |
|---|---|
| 0 | Amaze |
| 1 | Swift |
| 2 | i10 |
| 3 | Glanza |
对于特殊格式的车型名:
WR-V→ 提取WR-VX1 xDrive20d→ 提取X1 xDrive20dS-Presso→ 提取S-Presso
完全符合你的期望输出要求。
内容的提问来源于stack exchange,提问作者Gaurav
相关产品推荐
相关产品推荐

