pandas ValueError:模式不包含捕获组

新手上路,请多包涵

使用正则表达式时,我得到:

 import re
string = r'http://www.example.com/abc.html'
result = re.search('^.*com', string).group()

在熊猫中,我写道:

 df = pd.DataFrame(columns = ['index', 'url'])
df.loc[len(df), :] = [1, 'http://www.example.com/abc.html']
df.loc[len(df), :] = [2, 'http://www.hello.com/def.html']
df.str.extract('^.*com')

ValueError: pattern contains no capture groups

如何解决问题?

谢谢。

原文由 Chan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

根据 文档,您需要为 str.extract 指定一个 _捕获组_(即括号),以便提取。

Series.str.extract(pat, flags=0, expand=True)

对于系列中的每个主题字符串,从正则表达式 pat 的第一个匹配项中提取组。

每个捕获组在输出中构成自己的列。

 df.url.str.extract(r'(.*.com)')

                        0
0  http://www.example.com
1    http://www.hello.com

 # If you need named capture groups,
df.url.str.extract(r'(?P<URL>.*.com)')

                      URL
0  http://www.example.com
1    http://www.hello.com

或者,如果你需要一个系列,

 df.url.str.extract(r'(.*.com)', expand=False)

0    http://www.example.com
1      http://www.hello.com
Name: url, dtype: object

原文由 cs95 发布,翻译遵循 CC BY-SA 4.0 许可协议

您需要为匹配组指定列 url()

 df['new'] = df['url'].str.extract(r'(^.*com)')
print (df)
  index                              url                     new
0     1  http://www.example.com/abc.html  http://www.example.com
1     2    http://www.hello.com/def.html    http://www.hello.com

原文由 jezrael 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏