Python正则表达式提取子串:Pandas列特定字段提取失败问题
解决Pandas正则提取缺失RMK的问题
你的问题出在正则表达式的匹配要求上——原表达式r"\w*-NY-(.*?)-\w*"强制要求提取的内容后面必须跟着-和一组单词字符,但LOD-NY-RMK在RMK之后没有这部分内容,导致匹配失败返回NaN。下面给你两种高效的解决思路:
方法1:修改正则表达式(更灵活)
把正则改成匹配NY-之后到下一个-或字符串结尾的内容,这样不管后面有没有后续部分都能正确提取:
df['new_column'] = df['column'].str.extract(r"\w*-NY-([^-]+)", expand=False)
这里[^-]+表示匹配除了-之外的任意字符,直到遇到-或者字符串结束,完美覆盖两种格式的字符串。
或者也可以保留原结构,把后面的-\w*设为可选(用?标记非捕获组):
df['new_column'] = df['column'].str.extract(r"\w*-NY-(.*?)(?:-\w*)?", expand=False)
(?:-\w*)?表示这部分是可选的,匹配不到也不会影响前面的提取。
方法2:字符串分割(更简单)
因为你的所有字符串都是固定用-分隔,且目标内容是分割后的第3个元素(索引从0开始),直接用split更直观:
df['new_column'] = df['column'].str.split('-').str[2]
这种方法不需要正则,代码更简洁,对于这种固定格式的字符串效率也更高。
验证结果
两种方法运行后,new_column的结果都会是:
0 EP 1 EC 2 EC 3 LSM 4 PM 5 PM 6 RMK 7 EC Name: new_column, dtype: object
内容的提问来源于stack exchange,提问作者Baktaawar
相关产品推荐
相关产品推荐

