如何从pandas DataFrame列中提取汽车车型后缀标识
Pandas 提取汽车信息列车型后缀标识实现方案
观察所有输入输出样本的规律:需提取的车型后缀基本为字符串末尾由大写字母、数字、小数点、空格组成的片段,前缀的品牌、车型名等内容多包含小写字母,可通过正则匹配直接提取目标片段。
实现代码
import pandas as pd # 构造测试数据(实际使用时替换为读取你的数据源即可) data = { "car_info": [ "2015 Maruti Swift VDI ABS", "2012 Maruti Swift Dzire VDI BS IV", "2013 Maruti Swift VDI", "2012 Maruti Swift VDI", "2010 Honda City S MT PETROL", "2013 Maruti Swift Dzire VDI BS IV", "2014 Maruti Swift Dzire VDI BS IV", "2014 Maruti Swift VDI", "2014 Maruti Swift VXI", "2016 Hyundai Grand i10 SPORTZ 1.2 KAPPA VTVT", "2013 Maruti Swift Dzire ZDI", "2012 Hyundai i20 SPORTZ 1.4 CRDI", "2010 Hyundai i10 MAGNA 1.2 KAPPA2", "2019 Maruti Vitara Brezza VDI", "2017 Maruti Vitara Brezza VDI OPT", "2013 Maruti Swift Dzire VXI 1.2 BS IV", "2017 Maruti Alto 800 LXI", "2009 Hyundai i10 MAGNA 1.2" ] } df = pd.DataFrame(data) # 提取车型后缀,正则匹配字符串末尾的大写字母、数字、小数点、空格组成的片段 df["car_suffix"] = df["car_info"].str.extract(r'([A-Z0-9.\s]+)$', expand=False) # 查看结果 print(df)
代码说明
- 使用
str.extract()是pandas中专门用于从字符串列提取正则匹配片段的函数,参数expand=False表示返回Series而非DataFrame,方便直接赋值给新列 - 正则表达式
r'([A-Z0-9.\s]+)$'含义:()为捕获组,仅提取括号内匹配的内容[A-Z0-9.\s]+表示匹配1个及以上的大写字母、数字、小数点、空格$表示匹配到字符串末尾,确保取的是最后符合要求的后缀部分
如果有个别样本匹配偏差(比如部分车型名本身包含大写词汇),可以根据实际数据调整正则规则、添加排除词列表即可。
内容的提问来源于stack exchange,提问作者Kunal Parihar
相关产品推荐
相关产品推荐

