Pandas字符串分割:提取指定索引范围元素的实现方案
Pandas分割字符串并提取指定索引元素的解决方案
问题场景
DataFrame的某一列存了这些字符串:active_days_revenue、active_days_rate、total_revenue、gap_days_rate
需要完成两个操作:
- 用下划线作为分隔符分割每个字符串
- 提取分割后索引0到1的元素,并重新用下划线连接,最终得到结果:
active_days、active_days、total_revenue、gap_days
之前尝试df['text'].split('_')[:1]无效,df['text'].split('_')[0]只能拿到第一个元素,达不到需求。
解决方法
方法一:用Pandas字符串方法链式调用
直接利用Pandas的str属性提供的字符串处理方法,一步到位:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'text': ['active_days_revenue', 'active_days_rate', 'total_revenue', 'gap_days_rate'] }) # 分割→取前两个元素→重新连接 df['result'] = df['text'].str.split('_').str[:2].str.join('_')
str.split('_'):把每个字符串按下划线分割成列表str[:2]:提取列表的前两个元素(对应索引0和1)str.join('_'):将这两个元素用下划线重新拼接成字符串
方法二:用正则表达式提取
如果习惯用正则,也可以直接匹配目标内容:
df['result'] = df['text'].str.extract(r'^([^_]+(?:_[^_]+)?)')
正则表达式^([^_]+(?:_[^_]+)?)的含义:
^:匹配字符串开头[^_]+:匹配一段不含下划线的内容(?:_[^_]+)?:可选的一段“下划线+不含下划线的内容”,实现取前两个分割部分的效果
验证结果
执行上述代码后,df['result']列的输出就是:
0 active_days 1 active_days 2 total_revenue 3 gap_days Name: result, dtype: object
完全符合预期。
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

