我正在處理一個資料集,我將一個 Excel 列的內容分成 3 個單獨的列。資料的模擬版本如下:
| 電影標題/類別/評級 |
|---|
| 華爾街之狼 A-13 x 9 |
| Django Unchained IMDB x 8 |
| EXPL 鬼屋恐懼 x 7 |
| 銀色襯里 DC-23 x 8 |
這就是我希望結果的樣子:
| 標題 | 類別 | 評分 |
|---|---|---|
| 華爾街的狼 | A-13 | 9 |
| 被解放的姜戈 | 國際資料庫 | 8 |
| EXPL鬼屋 | 害怕 | 7 |
| 一線希望 | DC-23 | 8 |
這是我用來成功分離單元格的正則運算式:對于評級,這個正則運算式有效:
data = [[Movie Titles/Category/Rating, Rating]] = data['Movie Titles/Category/Rating'].str.split(' x ', expand = True)
但是,要將類別與電影片名分開,此正則運算式不起作用:
data['Category']=data['Movie Titles/Category/Rating'].str.extract('((\s[A-Z]{1,2}-\d{1,2})|(\s[A-Z]{4}$))', expand = True)
由于大寫字母模式也出現在第三個單元格的中間(EXPL 和我只想將 FEAR 分隔到一個單獨的列中),正則運算式模式 '\s[AZ]{4}$' 不起作用。有沒有辦法在 RegEx 模式中指示我只希望表格單元格末尾的大寫文本分開(FEAR)而不是中間(EXPL)?
uj5u.com熱心網友回復:
假設xCategory 和 Rating 之間總是存在,并且 Category 中沒有空格,那么以下應該得到您想要的:
(.*) (.*) x (\d )
uj5u.com熱心網友回復:
我認為
'((\s[A-Z]{1,2}-\d{1,2})|(\s[A-Z]{4})) x'
會為你作業 - 表明你想要字串的一部分,就在x. (假設該模式對于您的資料始終適用。)
uj5u.com熱心網友回復:
您可以使用
import pandas as pd
df = pd.DataFrame({'Movie Titles/Category/Rating':['Wolf of Wall Street A-13 x 9','Django Unchained IMDB x 8','The EXPL Haunted House FEAR x 7','Silver Lining DC-23 x 8']})
df2 = df['Movie Titles/Category/Rating'].str.extract(r'^(?P<Movie>.*?)\s (?P<Category>\S )\s x\s (?P<Rating>\d )$', expand=True)
請參閱正則運算式演示。
詳情:
^- 字串的開始(?P<Movie>.*?)- 組(列)“電影”:除換行符以外的任何零個或多個字符,盡可能少\s- 一個或多個空格(?P<Category>\S )- 組“類別”:一個或多個非空白字符\s x\s-x用一個或多個空格包圍(?P<Rating>\d )- 組“評級”:一位或多位數字$- 字串的結尾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358658.html
