Python Pandas:从DataFrame列提取行权价与类型至新列
解决方案
针对你的需求,我们可以通过更精准的正则表达式提取行权价(strike),同时优化类型(type)的提取逻辑:
提取行权价(strike)
利用正则的正向预查特性,精准匹配位于CE/PE之前的5位连续数字,避免误匹配日期部分的数字:
df['strike'] = df['symbol'].str.extract(r'(\d{5})(?=[CP]E$)', expand=False)
正则说明:
\d{5}:匹配连续5位数字(?=[CP]E$):正向预查,确保这5位数字后紧跟CE或PE,且处于字符串末尾
优化类型(type)提取
替换你之前的正则,直接匹配字符串末尾的CE/PE,更简洁准确:
df['type'] = df['symbol'].str.extract(r'([CP]E$)', expand=False)
测试示例
针对你的示例值BANKNIFTY25JAN2436500CE,执行后会得到:
strike列值:36500type列值:CE
备选方案(固定格式场景)
如果你的symbol格式完全固定(品种名、日期长度均不变),也可以用字符串切片快速提取:
# 从倒数第7位到倒数第2位取行权价,倒数2位取类型 df['strike'] = df['symbol'].str[-7:-2] df['type'] = df['symbol'].str[-2:]
这种方法性能略高,但依赖格式固定,灵活性不如正则。
内容的提问来源于stack exchange,提问作者mona
相关产品推荐
相关产品推荐

