为什么使用正则表达式的str.match在Pandas中不起作用

时间:2019-11-26 12:47:08

标签: python pandas

我们正在尝试提取其列包含严格以下值之一的行[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]")]

但是 问题是那不起作用。而不是返回前三列,而是返回所有列 。我们不明白为什么这是错误的。

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}$")]