pandas.Series.str.extract 正則提取數據

pandas.Series.str.extract 

Series.str.extractselfpatflags = 0expand = True [來源]

提取的正則表達式捕獲組拍作爲一個數據幀列。

對於系列中的每個主題字符串,從正則表達式pat的第一個匹配中提取組。

參數:

pat : str

具有捕獲組的正則表達式模式。

flags : int,默認爲0(無標誌)

來自re模塊的標誌,例如re.IGNORECASE,修改正則表達式匹配,例如大小寫,空格等。有關詳細信息,請參閱re

expand : bool,默認爲True

如果爲True,則返回DataFrame,每個捕獲組一列。如果爲False,如果有一個捕獲組,則返回系列/索引;如果有多個捕獲組,則返回DataFrame。

版本0.18.0中的新功能。

返回:

DataFrame或系列或索引

一個DataFrame,每個主題字符串有一行,每個組有一列。正則表達式pat中的任何捕獲組名稱都將用於列名稱; 否則將使用捕獲組編號。即使找不到匹配項,每個結果列的dtype也始終爲object。如果 expand=False和pat只有一個捕獲組,則返回一個系列(如果主題是系列)或索引(如果主題是索引)。

例子

具有兩個組的模式將返回具有兩列的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                上海明偉傢俱廠&lt;銷售部&gt;
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.extractselfpatflags = 0expand = True ) 

正則表達式需要改一改

# 需要改成這樣
([\(\)()\u4e00-\u9fa5]+有限公司)

代碼是這樣的

# 按之前寫的是匹配不出數據
# 這裏的意思 [] 是匹配不到數據 [\(\)()\u4e00-\u9fa5]+ 
# 需要 在[]外在套一層()  ([\(\)()\u4e00-\u9fa5]+)

Series.str.extract('([\(\)()\u4e00-\u9fa5]+有限公司)')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章