我们正在尝试提取其列包含严格以下值之一的行[TC1, TC2, TC3]
。诀窍是某些列还包含以下值TC12,TC13
等。我们不想提取它们。这里不可以使用str.contains
。
Col_1 Col_2 Col_3
1 A TC1
2 B TC2
3 C TC3
4 D TC12
5 D TC15
6 D TC16
Col_1 Col_2 Col_3
1 A TC1
2 B TC2
3 C TC3
我们使用了以下命令:
df1 = df.loc[df1['Col_3'].str.match("TC\d{1}")]
df1 = df.loc[df1['Col_3'].str.match("TC[1-3]{1}")]
df1 = df.loc[df1['Col_3'].str.match("TC[1,2,3]")]
但是 问题是那不起作用。而不是返回前三列,而是返回所有列 。我们不明白为什么这是错误的。
答案 0 :(得分:4)
在您的正则表达式d {1}中最终返回d,这就是它返回所有匹配项的原因。 您需要通过在正则表达式中添加$来显式结束字符串。
df1 = df.loc[df1['Col_3'].str.match("TC[1-3]{1}$")]
答案 1 :(得分:2)
TC\d{1}
将匹配所有列,您需要指定要在行的末尾停止以仅捕获末尾一位的字符。您可以使用 $ char。
TC\d{1}$
答案 2 :(得分:1)
您缺少终止符“ $”。
最好同时使用起始字符“ ^”和终止字符。
尝试一下:
df1 = df.loc[df['Col_3'].str.match(r"^TC\d{1}$")]