iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
Python

Python和R入門語法比較系列 第 16

08 [python] 用Regular Expression(正規表示法)處理文字 [16th 鐵人 Day 16]

  • 分享至 

  • xImage
  •  

下載song_rank.csv

上篇【08 [R] 用Regular Expression(正規表示法)處理文字】

本篇 # Python

import pandas as pd
with open('data/song_rank.csv') as f:
    p = pd.read_csv(f)
p

https://ithelp.ithome.com.tw/upload/images/20240822/20162398cXNyaaj5U3.png

p.Song
    0                      青空未來 (Future)
    1                       勇氣 (Courage)
    2                             沒什麼大不了
    3                       我 (feat. 馬佳)
    4                               人間遊戲
    5        愛情限時批 (Express love letter)
    6                故作完美 (Imperfection)
    7                我們 (《奇蹟》前導片插曲) (Us)
    8     愛在蔓延時 (When Love Being Spread)
    9              煙火星辰 (電視劇《你是我的榮耀》片頭曲)
    10                       紅空過去 (past)
    11                              放空現在
    12                     力量 (strength)
    13                               很重要
    Name: Song, dtype: object

必須以 p.Song 取出一條Series格式

type(p.Song)
    pandas.core.series.Series

如果用
p.Song**[0]** 取出一個string格式.replace()會報錯

I. 把 'r' 去掉

p.Song.replace('r','',regex=True)
    0                      青空未來 (Futue)
    1                       勇氣 (Couage)
    2                            沒什麼大不了
    3                      我 (feat. 馬佳)
    4                              人間遊戲
    5         愛情限時批 (Expess love lette)
    6                故作完美 (Impefection)
    7               我們 (《奇蹟》前導片插曲) (Us)
    8     愛在蔓延時 (When Love Being Spead)
    9             煙火星辰 (電視劇《你是我的榮耀》片頭曲)
    10                      紅空過去 (past)
    11                             放空現在
    12                     力量 (stength)
    13                              很重要
    Name: Song, dtype: object

II. 把 're' 去掉

p.Song.replace('re','',regex=True)
    0                      青空未來 (Futu)
    1                     勇氣 (Courage)
    2                           沒什麼大不了
    3                     我 (feat. 馬佳)
    4                             人間遊戲
    5        愛情限時批 (Expss love letter)
    6              故作完美 (Imperfection)
    7              我們 (《奇蹟》前導片插曲) (Us)
    8     愛在蔓延時 (When Love Being Spad)
    9            煙火星辰 (電視劇《你是我的榮耀》片頭曲)
    10                     紅空過去 (past)
    11                            放空現在
    12                     力量 (stngth)
    13                             很重要
    Name: Song, dtype: object

III. 把 'r' 和 'e' 去掉,要用[ ]

p.Song.replace('[re]','',regex=True)
    0                   青空未來 (Futu)
    1                    勇氣 (Couag)
    2                        沒什麼大不了
    3                   我 (fat. 馬佳)
    4                          人間遊戲
    5         愛情限時批 (Expss lov ltt)
    6              故作完美 (Impfction)
    7           我們 (《奇蹟》前導片插曲) (Us)
    8     愛在蔓延時 (Whn Lov Bing Spad)
    9         煙火星辰 (電視劇《你是我的榮耀》片頭曲)
    10                  紅空過去 (past)
    11                         放空現在
    12                  力量 (stngth)
    13                          很重要
    Name: Song, dtype: object

IV. 把 字母(小寫, 大寫), '.' 和 '《》' 去掉

p.Song.replace('[a-zA-Z().《》]','',regex=True)
    0                  青空未來 (F)
    1                    勇氣 (C)
    2                    沒什麼大不了
    3                  我 (. 馬佳)
    4                      人間遊戲
    5               愛情限時批 (E  )
    6                  故作完美 (I)
    7        我們 (《奇蹟》前導片插曲) (U)
    8           愛在蔓延時 (W L B S)
    9     煙火星辰 (電視劇《你是我的榮耀》片頭曲)
    10                  紅空過去 ()
    11                     放空現在
    12                    力量 ()
    13                      很重要
    Name: Song, dtype: object

[ ] . $ * 等 特殊符號

符號 意思
中括號[ ] 只要出現[ ]裡的字都要
.
...$ ...的格式
* 一個以上的字
\ 跳脫字元,例如:\ \( 代表 (

幫我把 '(' 括號後的字拿掉 # 青空未來 後面 留有 空格

p.Song.replace('\\(.*$','',regex=True) 
    0      青空未來 
    1        勇氣 
    2     沒什麼大不了
    3         我 
    4       人間遊戲
    5     愛情限時批 
    6      故作完美 
    7        我們 
    8     愛在蔓延時 
    9      煙火星辰 
    10     紅空過去 
    11      放空現在
    12       力量 
    13       很重要
    Name: Song, dtype: object

幫我把 '(' 括號後的字拿掉 # 青空未來 後面 '沒有' 空格

p.Song.replace('[ (].*$','',regex=True) 
    0       青空未來
    1         勇氣
    2     沒什麼大不了
    3          我
    4       人間遊戲
    5      愛情限時批
    6       故作完美
    7         我們
    8      愛在蔓延時
    9       煙火星辰
    10      紅空過去
    11      放空現在
    12        力量
    13       很重要
    Name: Song, dtype: object

\ 跳脫字元

正規表示式 Regular Expression
https://ithelp.ithome.com.tw/upload/images/20240822/20162398Riz7YeUSwc.png

如果 我們要比對的字符 是\ 怎麼辦?

--> r' '

# r 代表 raw string 純字符

'把 \t 換成 tab', '把 \n 換成 enter'

S = pd.Series(['把 \t 換成 tab', '把 \n 換成 enter'])
S

S長這樣:

0      把 \t 換成 tab
1    把 \n 換成 enter
dtype: object

注意!S.replace 必須是Series格式,如果是String會錯

把 \t 換成 tab

S.replace(r'\t','tab',regex=True)

執行:

0     把 tab 換成 tab
1    把 \n 換成 enter
dtype: object

把 \t 換成 tab,把 \n 換成 enter

S.replace(r'\t','tab',regex=True).replace(r'\n','enter', regex=True)

執行:

0        把 tab 換成 tab
1    把 enter 換成 enter
dtype: object

下載song_rank.csv

p

https://ithelp.ithome.com.tw/upload/images/20240822/201623989l8ygrGd3S.png

用 \ 方式 把 所有 ()括號,包括括號本身 都去掉

p.replace('\\(.*\\)', '', regex=True)

https://ithelp.ithome.com.tw/upload/images/20240822/201623980vsradUAKg.png

不用用 r'' 方式

這個會把 ( . * ) 這四個都變成 純字符

p.replace(r'(.*)', '', regex=True)

內容預告:

09 [python] 表格 dataframe.insert插入欄位 和 字串處理 Series.str.split

10 [python] pandas的欄列選擇工具 dataframe.loc[ ]和.iloc[ ]

10 [R] r的dataframe欄列選擇方式

11 取得欄位位置

12 布林值和表格條件選取

13 畫長條圖統計

14 [Python] for迴圈 和 matplotlib.pyplot 畫線圖

14 [R]for迴圈 和 ggplot 畫線圖


上一篇
08 [R] 用Regular Expression(正規表示法)處理文字 [16th 鐵人 Day 15]
下一篇
09 [python] 表格 dataframe.insert插入欄位 和 字串處理 Series.str.split [16th 鐵人 Day 17]
系列文
Python和R入門語法比較30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言