目前我有一个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中得不到任何东西。我认为问题来自元字符:[]。我该如何解决这个问题?
答案 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