在本文中,我们将介绍一些
批量替换列名的
简单和高级技巧。从基本的查找和替换到更复杂的公式,你可以同时将逻辑应用于多个列。
如果是修改单个列名,我们可以直接在 Power Query 中双击列名进行修改。
如果是具有相同规律的列名,例如添加前缀、将单词的首字母大写、替换下划线等。我们就可以使用一些文本函数搭配上 Table.TransformColumnNames(Power Query 中用于重命名列的函数)进行批量转换,该函数的用法为:
= Table.TransformColumnNames(
table as table,
nameGenerator as function,
optional options as nullable record
)
下面我们列举出了一些常见的例子。
替换字符
有时,列名称中会带有我们想要删除的文本字符,要一次性替换所有列名称中的字符,我们可以使用以下代码:
= Table.TransformColumnNames( 源, each Text.Replace( _, "原始文本", "替换文本" ) )
如果你不知道这里的 _ 代表什么,可以看下我们介绍 each 和 _ 的文章,这里可以先理解为当前正在处理的列名。
参考:
99.9% 的人不知道的 PowerQuery 知识
用法示例,将列名称中所有的城市文本替换为空格。
添加前缀或后缀
在某些情况下,区分来自不同表的列很有用,可以使用以下代码在列名中添加前缀或后缀:
= Table.TransformColumnNames( 源, each "前缀." & _ )
= Table.TransformColumnNames( 源, each _ & ".后缀" )
更改大小写
= Table.TransformColumnNames( 源, each Text.Lower( _ ) )
= Table.TransformColumnNames( 源, each Text.Upper( _ ) )
= Table.TransformColumnNames( 源, each Text.Proper( _ ) )
删除某些不必要的字符
当列名包含不必要的字符或空格时,Text.Trim 或 Text.Clean 可以快速删除这些字符。
= Table.TransformColumnNames( 源, each Text.Trim( _ ) )
= Table.TransformColumnNames( 源, each Text.Clean( _ ) )
有条件地转换列名
到目前为止,我们已经对每一列应用了转换。但你可能会需要转换某些特定列,这时我们可以使用 if 函数限制仅满足特定条件的列修改列名。
假设你有一个日历表,其中有些列名包含单词 date,我们要标记所有包含单词 date 的列名。可以通过以下方式在代码中添加条件:
Table.TransformColumnNames( 源,
each if Text.Contains(_, "date" ) then "前缀." & _ else _ )
该函数先执行条件判断,然后只对条件为真的值进行前缀处理。在其他情况下,将返回原始值,以下划线 (_) 表示。
使用转换表表重命名
在某些情况下,一般的转换是不够的。在这种情况下,可以使用转换表来指示重命名列。这不是动态的,但如果使用多种语言或只是非常具体的需求,它会很有用。这是如何工作的?
此解决方案利用了 Table.RenameColumns 函数。此函数的语法为:
= Table.RenameColumns( table as table,
renames as list,
optional missingField )
对于翻译表,可以创建一个名为重命名的单独查询,其中包含一个具有旧列名的列和一个具有新列名的列。
然后使用 List.Zip 函数将表列转换为正确的格式就完成了。
这对于一些列名翻译操作非常有用,因为 Excel 之前也是推出了翻译函数。
参考:
Excel 新函数,轻松搞定数据翻译
现在你知道如何使用 Power Query 一次重命名多个列了吧,赶快去试一试吧。