PowerQueryで列名に含まれる特殊文字(!@#$%&()/.?など)を削除または置換する方法を紹介します。
ここでは以下の2つの手順について解説します。
- 列名に含まれる全ての特殊文字を削除
- 列名に含まれる全ての特殊文字をアンダーバー
_
に置換
列名にある特殊文字・スペースの削除
利用する式(M言語)
テーブル内に全ての列名に含まれる特殊文字やスペースを削除するには下記の式を用います。
Table.RenameColumns(テーブル名,
List.Transform(
Table.ColumnNames(テーブル名),
each {_, Text.Remove(_, {” “,” ”,”!”, “@”, “#”, “$”, “%”, “^”, “&”, “*”, “(“, “)”, “-“, “+”, “=”, “[“, “]”, “{“, “}”, “|”,”\”, “/”, “:”, “;”, “‘”, “\”, “<“, “>”, “,”, “.”, “?”})}
))

テーブル名を変更して使用してください
それぞれの関数の役割は以下の通りです。
- Table.RenameColumns関数:与えられたリストに応じて列名を変更する
- List.Transform関数:リストに関数を適用して要素を変換する
- Table.ColumnNames関数:テーブルのすべての列名のリストを取得
- Text.Remove関数:指定の文字を削除する
適用手順
テーブルにある全ての列の特殊文字を削除する手順を解説します。
手順の説明例として、下図の3つの列の列名を変更します。


まず 式を入力する新しい列を追加します。
下図のようにステップを右クリックして「後にステップの挿入」を選択します。


追加されたステップにおいて下記のM言語の式を入力します。
テーブルには変更された型
を設定しています。
= Table.RenameColumns(変更された型,List.Transform(Table.ColumnNames(変更された型),each {_, Text.Remove(_, {" "," ","!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "+", "=", "[", "]", "{", "}", "|","\", "/", ":", ";", "'", "\", "<", ">", ",", ".", "?"})}))


下図のように列名から特殊文字とスペースを削除できています。


正規表現を利用した方法
正規表現を利用して列名からアルファベットと数字のみを残して他を削除する方法もあります。
Table.RenameColumns(テーブル名,
List.Transform(
Table.ColumnNames(テーブル名),
each {_, Text.Select(_, {“A”..”Z”, “a”..”z”, “0”..”9″})}
))



それ以外にも残したい文字がある場合はリストに追加すればOKです
上記の解説例と同様にステップを追加して適用すると、下図のようにアルファベットと数字のみの列名とすることができます。


列名にある特殊文字・スペースの置換
利用する式(M言語)
テーブル内に全ての列名に含まれる一つの特殊文字またはスペースを置換するには下記の式を用います。
下記の式は半角スペース" "
をアンダーバー"_"
に変更する式です。それぞれ置換した文字を変更して利用します。
Table.RenameColumns(テーブル名,
List.Transform(
Table.ColumnNames(テーブル名),
each {_, Text.Replace(_, ” “, “_”)}
))



テーブル名と置換文字は任意に変更して使用してください
それぞれの関数の役割は以下の通りです。
- Table.RenameColumns関数:与えられたリストに応じて列名を変更する
- List.Transform関数:リストに関数を適用して要素を変換する
- Table.ColumnNames関数:テーブルのすべての列名のリストを取得
- Text.Replace関数:指定の文字を置換する
適用手順
テーブルにある全ての列の半角スペースをアンダーバーに置換する手順を解説します。
手順の説明例として、下図の3つの列の列名を変更します。


まず 式を入力する新しい列を追加します。
下図のようにステップを右クリックして「後にステップの挿入」を選択します。


追加されたステップにおいて下記のM言語の式を入力します。
テーブルには変更された型
を設定しています。
= Table.RenameColumns(変更された型,List.Transform(Table.ColumnNames(変更された型),each {_, Text.Replace(_, " ", "_")}))


下図のように列名の半角スペースをアンダーバーに置換できています。


パワークエリの学習本についてはコチラの記事でまとめてますので参考にしてみてください。
・初心者向けおすすめ学習本
・初中級者向けおすすめ学習本
コメント