You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame索引的字母数字字符串拆分为两列?

问题

我有一个以如下内容为索引的DataFrame:

Index(['LCOc1', 'LCOc2', 'LCOc3', 'LCOc4', 'LCOc5', 'LCOc6', 'LCOc7', 'LCOc8',
       'LCOc9', 'LCOc10', 'LCOc11', 'LCOc12', 'CLc1', 'CLc2', 'CLc3', 'CLc4',
       'CLc5', 'CLc6', 'CLc7', 'CLc8', 'CLc9', 'CLc10', 'CLc11', 'CLc12',
       'OQc1', 'OQc2', 'OQc3', 'OQc4', 'OQc5', 'OQc6', 'OQc7', 'OQc8', 'OQc9',
       'OQc10', 'OQc11', 'OQc12'],
      dtype='object', name='CLOSE')

希望新增两列:一列仅包含字母部分(如['LCOc', 'LCOc', ..., 'CLc', ...]),另一列仅包含数字部分(如[1,2,...,12,1,...])。尝试过str.split和str.extract但未成功实现目标。以下是DataFrame的部分数据:

2022-09-02
CLOSE             
LCOc1        93.02
LCOc2        91.81
LCOc3        90.66
LCOc4        89.52
LCOc5        88.52
LCOc6        87.68
LCOc7        86.94
LCOc8        86.24
LCOc9        85.63
LCOc10       85.02
LCOc11       84.40
LCOc12       83.81
CLc1         86.87
CLc2         86.48
CLc3         85.90
CLc4         85.19
CLc5         84.41

解决方案

你之前用str.extract没成功,大概率是正则表达式没匹配对格式。你的索引是「固定字母前缀+1-2位数字」的结构,用下面的方法就能准确拆分:

方法1:用str.extract精准拆分

直接对索引使用正则提取,把字母和数字分成两组:

# 提取字母和数字列,正则匹配开头非数字+结尾数字
df[['字母前缀', '月份']] = df.index.str.extract(r'^([^\d]+)(\d+)$')

# 把数字列转成整数(可选,根据需求来)
df['月份'] = df['月份'].astype(int)

运行后DataFrame就会新增两列,效果如下:

2022-09-02 字母前缀  月份
CLOSE                     
LCOc1        93.02  LCOc    1
LCOc2        91.81  LCOc    2
...
LCOc12       83.81  LCOc   12
CLc1         86.87   CLc    1
...

方法2:替换法拆分(更直观)

如果觉得正则提取有点绕,也可以用替换的方式分别保留字母和数字:

# 去掉结尾的数字,保留字母部分
df['字母前缀'] = df.index.str.replace(r'\d+$', '')
# 去掉开头的字母,保留数字部分并转成整数
df['月份'] = df.index.str.replace(r'^\D+', '').astype(int)

这个方法和extract效果完全一致,只是实现方式不同,选哪个看你习惯。


内容的提问来源于stack exchange,提问作者neutralname

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:25:24