Pandas filter正则筛选列时XXYZ等预期列未匹配原因查询
问题原因说明
你遇到的问题是正则表达式语法使用错误导致的匹配规则不符合预期:
- 正则中的方括号
[]是单字符匹配集合,仅会匹配内部包含的任意一个单个字符,你写的[XY|YY]并不会匹配XY或YY这两种双字符组合,只会匹配X、Y、|三个字符中的任意一个,同时你要匹配的XXYZ、XYYZ前缀都是4个字符长度,X[XY|YY]Z仅匹配3个字符长度的前缀,自然无法命中目标列。 - 同理你写的
[1|2|3]也是错误用法,|在方括号内不会被识别为“或”逻辑,只会被当作普通字符,匹配1/2/3直接写[123]即可。
修正方案
把需要匹配双字符组合的部分换成小括号分组即可,非捕获组(?:)就可以满足需求,修正后的代码如下:
import pandas as pd c = ["XYYZ 1011", "XYYZ 1021", "XYYZ 1031", "XXYZ 1011", "XXYZ 1021", "XXYZ 1031","XYY 1001", "XYY 1002", "XXZ 1001"] df = pd.DataFrame(columns=c) # 修正正则写法 df = df.filter(regex=r'X(?:XY|YY)Z 10[123]1') print(df.columns)
运行后输出的列就是你需要的全部目标列:Index(['XYYZ 1011', 'XYYZ 1021', 'XYYZ 1031', 'XXYZ 1011', 'XXYZ 1021', 'XXYZ 1031'], dtype='object')
内容的提问来源于stack exchange,提问作者user13744439
相关产品推荐
相关产品推荐

