Pandas正则表达式问题:从含特定标识的字符串中正确提取股票名称
解决Pandas正则提取股票名称的问题
嘿,我来帮你搞定这个正则和Pandas的问题!首先先解释你遇到的ValueError:你写的正则里有两个捕获组(外层的括号和里面的^|Correction ),而str.extract默认会把每个捕获组的结果作为单独的列返回,所以它返回了2列数据,但你要赋值给一个名为Share Name的列,就出现了“传递了2个元素,但只需要1个”的错误。
接下来是解决方法,我们需要调整正则,让它:
- 忽略开头的
Correction前缀 - 只保留一个捕获组,确保
str.extract返回单列数据 - 正确匹配到终止词(DIVIDEND、(All、CONS、COMM、Section)之前的股票名称
修正后的正则与代码
使用非捕获组(?:...)来处理开头的可选前缀(要么是字符串起始,要么是Correction ),这样就不会生成额外的捕获组,只捕获我们需要的股票名称部分:
transactions_df["Share Name"] = transactions_df["MarketName"].str.extract(r"(?:^|Correction )(.*?(?=DIVIDEND|\(All|CONS|COMM|Section))")
验证每个示例的提取结果
Netflix DIVIDEND→ 提取结果:NetflixApple Inc (All Sessions) COMM→ 提取结果:Apple Inc(如果想去掉末尾空格,可以再加个.str.strip())Intel Corporation CONS→ 提取结果:Intel Corporation(同样可以用strip()处理空格)Correction Netflix Section 31 Fee→ 提取结果:Netflix
额外优化(可选)
如果你的数据里还有其他类似的前缀(比如Adjustment 、Reversal ),可以直接在非捕获组里添加,同时加上strip()清理首尾空格:
transactions_df["Share Name"] = transactions_df["MarketName"].str.extract(r"(?:^|Correction |Adjustment |Reversal )(.*?(?=DIVIDEND|\(All|CONS|COMM|Section))").str.strip()
内容的提问来源于stack exchange,提问作者gazm2k5
相关产品推荐
相关产品推荐

