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]+有限公司)')