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

如何用Python切片或split方法拆分Pandas DataFrame中的特定格式字符串?

用正则表达式拆分期权合约字符串为指定字段

固定切片的局限性很明显——证券名称长度不固定(比如BANKNIFTY是9位,TCS只有3位),日期格式还分数字编码和月份缩写两种,完全没法用固定位置来切。最靠谱的方式是用正则表达式匹配字符串的模式,直接提取四个部分。

这里针对你的合约字符串格式,写一个精准匹配的正则,结合Pandas的str.extract方法就能一次性拆分出所有字段:

import pandas as pd

# 示例数据
data = {'symbol': ['BANKNIFTY2330935500PE', 'FINNIFTY2330618050PE', 'NIFTY23DEC21000CE', 'TCS23MAR3000PE']}
df = pd.DataFrame(data)

# 正则提取四个字段
df[['security', 'date', 'value', 'type']] = df['symbol'].str.extract(r'^([A-Z]+)(\d{5}|[0-9]{2}[A-Z]{3})(\d+)([A-Z]{2})$')

print(df)

运行后会得到拆分结果:

symbolsecuritydatevaluetype
BANKNIFTY2330935500PEBANKNIFTY2330935500PE
FINNIFTY2330618050PEFINNIFTY2330618050PE
NIFTY23DEC21000CENIFTY23DEC21000CE
TCS23MAR3000PETCS23MAR3000PE

正则表达式说明

  • ^([A-Z]+):匹配字符串开头的所有大写字母,对应证券名称部分
  • (\d{5}|[0-9]{2}[A-Z]{3}):匹配两种日期格式——5位数字编码(如23309)或「两位年份+三位月份缩写」(如23DEC)
  • (\d+):匹配日期之后的连续数字,对应行权价数值
  • ([A-Z]{2})$:匹配字符串结尾的两位大写字母,对应合约类型(PE/CE)

这种方法完全不依赖固定位置,能适配所有你列出的合约格式,后续如果有同模式的新合约也能直接兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:38:39