Python Pandas ищет строки с метасимволами - PullRequest
0 голосов
/ 23 мая 2018

В настоящее время у меня есть 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 голосов
/ 23 мая 2018

Вам нужно экранировать эти символы с особым значением в регулярном выражении:

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
0 голосов
/ 23 мая 2018

Просто экранируйте символы [ и ], используя \:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...