亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將正則表達式應用于數據集的所有行?

如何將正則表達式應用于數據集的所有行?

HUH函數 2023-10-26 14:37:25
我有一個數據集如下:    data = {"C1" : ['DDDSSDSSDS','SSDDDSSDDS',    'DDDDDDDDDD','SSSSSSSSSS','SSSSSSSDSS','DDDDDSDDDD','SDDDDDDDDD']}    dt = pd.DataFrame(data)    print(dt)對于每個字符串,我想獲取每個“不間斷 S 組”的第一個元素和最后一個元素的位置。例如,對于第一行,我有“DDD SS D SS D S ”(如您所見,我有三組 S),我最喜歡的“S 組”輸出類似于[(3,5),(6,8),(9-10)]顯示第一和第二的位置第一排第三個“不間斷的S組”。因此輸出的示例如下:           C1                         C20  DDDSSDSSDS       [(3, 5), (6, 8), (9-10)]1  SSDDDSSDDS  [(0, 2), (5, 7), (9, 10)]2  DDDDDDDDDD                         []3  SSSSSSSSSS                  [(1, 11)]4  SSSSSSSDSS          [(0, 7), (8, 10)]5  DDDDDSDDDD                   [(5, 6)]6  SDDDDDDDDD                   [(0, 1)]我當前的解決方案是:def split_it(mystring):    x = re.findall('(S*)', mystring)    if x :      return(x)dt['C2'] = dt['C1'].apply(split_it)print(dt)這會導致以下輸出:0  DDDSSDSSDS  [, , , SS, , SS, , S, ]1  SSDDDSSDDS  [SS, , , , SS, , , S, ]2  DDDDDDDDDD   [, , , , , , , , , , ]3  SSSSSSSSSS           [SSSSSSSSSS, ]4  SSSSSSSDSS        [SSSSSSS, , SS, ]5  DDDDDSDDDD  [, , , , , S, , , , , ]6  SDDDDDDDDD  [S, , , , , , , , , , ]
查看完整描述

2 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

您可以使用


def split_it(mystring):

    return [(m.start(), m.end()) for m in re.finditer('S+', mystring)]

輸出:


>>> dt['C1'].apply(split_it)

0    [(3, 5), (6, 8), (9, 10)]

1    [(0, 2), (5, 7), (9, 10)]

2                           []

3                    [(0, 10)]

4            [(0, 7), (8, 10)]

5                     [(5, 6)]

6                     [(0, 1)]

Name: C1, dtype: object

返回re.finditer('S+', mystring)字符串中找到的所有匹配對象,您可以通過.start()和.end()調用獲取開始和結束位置。


請注意,輸出中出現空匹配,因為S*匹配零個或多個 S字符,您需要使用+來匹配一個或多個.


查看完整回答
反對 回復 2023-10-26
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

您可以使用 findall 應用正則表達式:


(

    dt

    .assign(C2= lambda x: x['C1'].str.findall('S+'))

    .assign(C2= lambda x: x.apply(lambda s: [(s[0].find(item),s[0].find(item)+len(item)) for item in s[1]] ,axis=1))

)


           C1                        C2

0  DDDSSDSSDS  [(3, 5), (3, 5), (3, 4)]

1  SSDDDSSDDS  [(0, 2), (0, 2), (0, 1)]

2  DDDDDDDDDD                        []

3  SSSSSSSSSS                 [(0, 10)]

4  SSSSSSSDSS          [(0, 7), (0, 2)]

5  DDDDDSDDDD                  [(5, 6)]

6  SDDDDDDDDD                  [(0, 1)]


查看完整回答
反對 回復 2023-10-26
  • 2 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號