【发布时间】:2020-06-22 13:43:00
【问题描述】:
此问题来自this stackoverflow question。
s = pd.Series(['cat)','hat)','dog)','fog)','pet)'])
searchfor = ['og)', 'at)']
s[s.str.contains('|'.join(searchfor))]
错误信息是
error
Traceback (most recent call last)
<ipython-input-208-b103d01401d9> in <module>
1 searchfor = ['og)', 'at)']
----> 2 s[s.str.contains('|'.join(searchfor))]
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\strings.py in contains(self, pat, case, flags, na, regex)
2521 def contains(self, pat, case=True, flags=0, na=np.nan, regex=True):
2522 result = str_contains(self._parent, pat, case=case, flags=flags, na=na,
-> 2523 regex=regex)
2524 return self._wrap_result(result, fill_value=na)
2525
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\strings.py in str_contains(arr, pat, case, flags, na, regex)
297 flags |= re.IGNORECASE
298
--> 299 regex = re.compile(pat, flags=flags)
300
301 if regex.groups > 0:
C:\ProgramData\Anaconda3\lib\re.py in compile(pattern, flags)
232 def compile(pattern, flags=0):
233 "Compile a regular expression pattern, returning a Pattern object."
--> 234 return _compile(pattern, flags)
235
236 def purge():
C:\ProgramData\Anaconda3\lib\re.py in _compile(pattern, flags)
284 if not sre_compile.isstring(pattern):
285 raise TypeError("first argument must be string or compiled pattern")
--> 286 p = sre_compile.compile(pattern, flags)
287 if not (flags & DEBUG):
288 if len(_cache) >= _MAXCACHE:
C:\ProgramData\Anaconda3\lib\sre_compile.py in compile(p, flags)
762 if isstring(p):
763 pattern = p
--> 764 p = sre_parse.parse(p, flags)
765 else:
766 pattern = None
C:\ProgramData\Anaconda3\lib\sre_parse.py in parse(str, flags, pattern)
942 if source.next is not None:
943 assert source.next == ")"
--> 944 raise source.error("unbalanced parenthesis")
945
946 if flags & SRE_FLAG_DEBUG:
error: unbalanced parenthesis at position 2
预期的输出是
0 cat)
1 hat)
2 dog)
3 fog)
不平衡括号在哪里? 我猜不出答案:-( (看起来您的帖子主要是代码;请添加更多详细信息。)
【问题讨论】:
-
您的正则表达式中有
paranethesis。您应该使用import re; searchfor = [re.escape(_) for _ in searchfor],然后使用 pandas 调用。 -
@DOOM 我之前尝试过在 python 中学习正则表达式,但不太成功。如果您愿意提供详细的答案,我会检查并接受。
-
@DOOM 抱歉,Quang Hoang 追上了你。
标签: python string pandas dataframe contains