Python Pandas搜索带元字符的字符串

时间:2018-05-23 15:27:09

标签: python pandas

目前我有一个DataFrame如下:

  index       Name            Value
    0       j_smith[1]         32
    1       j_smith[32]        46
    2       r_lee[2]           52
    3       m_brent[3]         61
    4       j_perry[4]         75
    5       j_perry[6]         81
    6       j[3]               92
    7       j[4]               72
    8       r[4]               63
    9       m_jackson[3]       78
    10      r_j[11]            98

在数据框中,名称格式为

'first name initial'_'last name'[numbers] 
'first name initial'[Numbers]
'first name initial'_'last name initial'[Numbers]

我尝试使用pd.str.contains函数查找带有'j_perry'和'j'(不带r_j的项)的行,如下所示:

Score = DF[DF['Name'].str.contains('j_perry[\d+]|j[\d+]')]

我从Score DataFrame中得不到任何东西。我认为问题来自元字符:[]。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用[简单地转义]\字符:

Score = DF[DF['Name'].str.contains('j_perry\[\d+\]|j\[\d+\]')]

>>> Score
    index        Name  Value
4       4  j_perry[4]     75
5       5  j_perry[6]     81
6       6        j[3]     92
7       7        j[4]     72
10     10     r_j[11]     98

要确保您没有r_j,请使用^指定您的字符串需要以j开头:

Score = DF[DF['Name'].str.contains('^j_perry\[\d+\]|^j\[\d+\]')]

>>> Score
   index        Name  Value
4      4  j_perry[4]     75
5      5  j_perry[6]     81
6      6        j[3]     92
7      7        j[4]     72

答案 1 :(得分:1)

你需要在正则表达式中逃避那些具有特殊含义的字符:

In [41]: DF[DF['Name'].str.contains(r'^(?:j_perry\[\d+\]|j\[\d+\])')]

Out[41]: 
             Name  Value
index                   
4      j_perry[4]     75
5      j_perry[6]     81
6            j[3]     92
7            j[4]     72