pandas.Series.str.extract ¶
Series.str.
extract
(self,pat,flags = 0,expand = True )[来源]
提取的正则表达式捕获组拍作为一个数据帧列。
对于系列中的每个主题字符串,从正则表达式pat的第一个匹配中提取组。
参数: |
pat : str 具有捕获组的正则表达式模式。 flags : int,默认为0(无标志) 来自 expand : bool,默认为True 如果为True,则返回DataFrame,每个捕获组一列。如果为False,如果有一个捕获组,则返回系列/索引;如果有多个捕获组,则返回DataFrame。 版本0.18.0中的新功能。 |
---|---|
返回: |
DataFrame或系列或索引 一个DataFrame,每个主题字符串有一行,每个组有一列。正则表达式pat中的任何捕获组名称都将用于列名称; 否则将使用捕获组编号。即使找不到匹配项,每个结果列的dtype也始终为object。如果 |
例子
具有两个组的模式将返回具有两列的DataFrame。不匹配将是NaN。
>>> s = pd.Series(['a1', 'b2', 'c3']) >>> s.str.extract(r'([ab])(\d)') 0 1 0 a 1 1 b 2 2 NaN NaN
模式可以包含可选组。
>>> s.str.extract(r'([ab])?(\d)') 0 1 0 a 1 1 b 2 2 NaN 3
命名组将成为结果中的列名。
>>> s.str.extract(r'(?P<letter>[ab])(?P<digit>\d)') letter digit 0 a 1 1 b 2 2 NaN NaN
如果expand = True,则具有一个组的模式将返回一个具有一列的DataFrame。
>>> s.str.extract(r'[ab](\d)', expand=True) 0 0 1 1 2 2 NaN
如果expand = False,则具有一个组的模式将返回Series。
>>> s.str.extract(r'[ab](\d)', expand=False) 0 1 1 2 2 NaN dtype: object
需求: 将公司名称提取出来
# 测试数据
99778 上海昌腾机电设备有限公司(销售部)
99812 上海昌达汽车配件有限公司(驻山东办事处)
99821 上海昌金企业管理(集团)有限公司
99837 上海昌雄机械设备有限公司(经营部)
99874 上海明丹信息科技有限公司(市场部)
99878 上海明义木业有限公司(上海天廓建材经销部)
99885 上海明乾物流有限公司 广 州分公司
99902 上海明伟家具厂<销售部>
99903 上海明伟家具厂<销售部>
99917 上海明先物资有限公司(销售部)
99922 上海明克包装公司 纸袋 纸塑复合袋 吨袋
99924 上海明克包装制品有限公司 销售部
99925 上海明克包装制品有限公司【销售部】
99940 上海明凯电子有限公司 生产部
99947 上海明利模具五金钢材有限公司(销售部)
99948 上海明利模具五金钢材有限公司(销售部)
99971 上海明可得照明电器有限公司/文安县可得照明电器厂
99983 上海明和超音波股份有限公司(上海嘉定办事处)
99984 上海明和超音波设备有限公司(嘉定办事处)
99994 上海明国(集团)塑胶制品有限公司
99996 上海明圣酒店设备(维修)有限公司
99998 上海明圣酒店设备(维修)有限公司
需要提取规范的数据:
99924 上海明克包装制品有限公司
99925 上海明克包装制品有限公司
99940 上海明凯电子有限公司
99947 上海明利模具五金钢材有限公司
99948 上海明利模具五金钢材有限公司
99971 上海明可得照明电器有限公司
99983 上海明和超音波股份有限公司
99984 上海明和超音波设备有限公司
99994 上海明国(集团)塑胶制品有限公司
99996 上海明圣酒店设备(维修)有限公司
99998 上海明圣酒店设备(维修)有限公司
按正则表示可以写成这样
# 这是正则表达式
# 表示"xxxx有限公司", "(xxx)xxx"有限公司
"[\(\)()\u4e00-\u9fa5]+有限公司"
这里需要注意:
Series.str.
extract
(self,pat,flags = 0,expand = True )
正则表达式需要改一改
# 需要改成这样
([\(\)()\u4e00-\u9fa5]+有限公司)
代码是这样的
# 按之前写的是匹配不出数据
# 这里的意思 [] 是匹配不到数据 [\(\)()\u4e00-\u9fa5]+
# 需要 在[]外在套一层() ([\(\)()\u4e00-\u9fa5]+)
Series.str.extract('([\(\)()\u4e00-\u9fa5]+有限公司)')