如何从Pandas DataFrame字符串列提取指定内容至新列
Pandas提取字符串指定内容的实现方案
给定如下Pandas DataFrame:
import pandas as pd df = pd.DataFrame([ "Lyreco A-Type small 2i", "Lyreco C-Type small 4i", "Lyreco N-Part medium", "Lyreco AKG MT 4i small", "Lyreco AKG/ N-Type medium 4i", "Lyreco C-Type medium 2i", "Lyreco C-Type/ SNU medium 2i", "Lyreco K-part small 4i", "Lyreco K-Part medium", "Lyreco SNU small 2i", "Lyreco C-Part large 2i", "Lyreco N-Type large 4i" ], columns=["Column_1"])
需要新增Column_2列,提取每行字符串中Lyreco 之后、尺寸标识(small/medium/large)之前的核心内容,最终目标结果如下:
| Column_1 | Column_2 |
|---|---|
| Lyreco A-Type small 2i | A-Type |
| Lyreco C-Type small 4i | C-Type |
| Lyreco N-Part medium | N-Part |
| Lyreco AKG MT 4i small | AKG MT |
| Lyreco AKG/ N-Type medium 4i | AKG/ N-Type |
| Lyreco C-Type medium 2i | C-Type |
| Lyreco C-Type/ SNU medium 2i | C-Type/ SNU |
| Lyreco K-part small 4i | K-part |
| Lyreco K-Part medium | K-Part |
| Lyreco SNU small 2i | SNU |
| Lyreco C-Part large 2i | C-Part |
| Lyreco N-Type large 4i | N-Type |
解决方案:正则表达式提取
利用Pandas的str.extract方法,结合正则表达式精准匹配目标内容,代码实现如下:
# 定义匹配正则 pattern = r'Lyreco\s+(.*?)\s+(?:\d+i\s+)?(?:small|medium|large)' # 新增目标列 df['Column_2'] = df['Column_1'].str.extract(pattern) # 输出结果 print(df)
正则逻辑说明
Lyreco\s+:匹配固定前缀"Lyreco "(兼容多个空格的情况)(.*?):非贪婪捕获目标内容,这部分就是最终要提取的Column_2值\s+(?:\d+i\s+)?:匹配可选的数字+i后缀(比如" 4i "),(?:...)为非捕获组,仅用于定位边界不参与提取(?:small|medium|large):匹配尺寸标识词,同样作为边界定位,不参与提取
内容的提问来源于stack exchange,提问作者ar_mm18
相关产品推荐
相关产品推荐

