Pandas如何拆分列提取//之间的字符串并生成对应新列
解答
完全可以通过split拆分操作实现该需求,无需依赖复杂正则,按固定分隔符做两层拆分即可完成提取,具体实现逻辑如下:
- 第一层拆分:针对
PRECIOS列的字符串,先按逗号,拆分得到分段列表,跳过首个对应1//的分段,截取后续5个有效分段 - 第二层拆分:对每个有效分段,按
/做二次拆分,直接取两个斜杠中间的数值内容 - 列赋值:将提取到的5个数值按顺序写入
PRECIO1、PRECIO 2、PRECIO 3、PRECIO 4、PRECIO 5五个新列即可
可直接运行的实现代码如下:
import pandas as pd # 测试数据构造 df = pd.DataFrame({ 'PRECIOS': [ "1//,2/3699/,3/3699/,4/3699/,6/3699/,7/4499/", "1//,2/3650/,3/3650/,4/3650/,6/3650/,7/9087/" ] }) # 核心提取逻辑 def get_price_list(content): # 按逗号拆分后跳过首段,取后续5个价格分段 part_list = content.split(',')[1:6] # 每个分段按/拆分,取中间位置的数值 return [part.split('/')[1] for part in part_list] # 批量赋值到新列 df[['PRECIO1', 'PRECIO 2', 'PRECIO 3', 'PRECIO 4', 'PRECIO 5']] = df['PRECIOS'].apply( lambda x: pd.Series(get_price_list(x)) )
执行后得到的结果完全匹配需求:
| PRECIOS | PRECIO1 | PRECIO 2 | PRECIO 3 | PRECIO 4 | PRECIO 5 |
|---|---|---|---|---|---|
| 1//,2/3699/,3/3699/,4/3699/,6/3699/,7/4499/ | 3699 | 3699 | 3699 | 3699 | 4499 |
| 1//,2/3650/,3/3650/,4/3650/,6/3650/,7/9087/ | 3650 | 3650 | 3650 | 3650 | 9087 |
提示:如果后续需要对价格列做数值统计、计算,提取时可以给数值套上
int()做类型转换,避免字符串类型无法参与算术运算。
内容的提问来源于stack exchange,提问作者Maximiliano Vazquez
相关产品推荐
相关产品推荐

