文本處理技巧:移除和提取
每當拿到原始數據,不如意十有八九,快速準確的清洗數據也是必備技能,數據清洗正好是 PowerQuery 的強項,本文就來介紹兩個常用的 M 函數:Text.Remove 和Text.Select。
看到以 Text 開頭的,就知道是文本處理函數,比如原始數據如下,
如果只想要中文名,就是把英文字母都去掉,可以用Text.Remove函數,添加自定義列,
姓名=Text.Remove([客戶],{"A".."Z"})
Text.Remove 的參數有兩個,第一個就是文本,第二個就是要移除的字元,可以是文本或者是文本的列表,{"A".."Z"}就是生成了一個從A到Z的列表,只要是大寫字母,就從客戶的信息中移除。
如果有小寫字母,需要把所有的字母都移除了,把大寫的"Z"替換成小寫的"z"就行了,
姓名=Text.Remove([客戶],{"A".."z"})
如果只想要英文名,要去掉中文名,可以這樣寫,
英文名=Text.Remove([客戶],{"一".."龜"})
Powerquery 的中文字元以 Unicode 連續儲存,"一"的 Unicode最小,正常使用的漢字中,"龜"的 Unicode 最大,因此{"一".."龜"}就包含了所有正常使用的漢字列表,正好利用這個特性,去除了所有的中文字元。
如果有更多種類的文本數據不規則的堆放在一起,比如這樣,
想把聯繫方式提取出來,第二個參數還可以這樣寫,
聯繫方式=Text.Remove([客戶],{"A".."z","一".."龜"})
把中文字元和英文字元的列表都放到第二個參數中,全部移除。
不過如果字元種類很多,像這樣更加雜亂的,
要提取聯繫方式,用Text.Remove就有點麻煩,各種奇怪的符號種類太多了,編碼也不一定連續。還好有一個Text.Select 函數專門用來提取的。
Text.Select 函數和 Text.Remove 正好相反,Text.Select 只提取第二個參數中的字元,上圖中提取聯繫方式,直接這樣寫,
聯繫方式=Text.Select([客戶],{"0".."9"})
直接就可以得到聯繫方式信息。
提取各種字元的列表如下,
這兩個函數的都很簡單,需要提取或者移除字元的情況直接套用就可以了。
TAG:PowerBI星球 |