PQ实战 | 文本中提取数值并求和
Power Query(以下简称PQ)为了数据清洗提供了大量的函数,基本可以处理日常的各种“脏”数据!
今天我们就来解答一位网友的问题,那就是如何提取一段文本中的数值,并求和,在PQ中,这个问题非常简单!
我们要求解的就是这里的总分,也就是把分值提取并相加!
第一步:加载数据到PQ
如果你是WPS或者低于2007就不要折腾了,这一块,可以看前面的基础教程,这里就不啰嗦了!2016及以上版本已经自带PQ功能,在数据选项看下!
第二步:按加号拆分
在PQ中新增一列,不像Excel中直接旁边输入即可,需要通过 【添加列】-> 【自定义列】,输入对应的列 标题,和对应的处理逻辑!
我们这里是使用Text.Split函数,如其名,他是Text类中的Split函数,也就是文本拆分函数,第一参数需要给定拆分的文本 [加分项及分支]-表示对应的列 ,第二个就是分隔符(+)!
确定后,拆分成list,点击list,可以看到对应的拆分的内容,这个list和其他语言中数组基本类似!
第三步:提取数值
在PQ中,我们可以Text.Select来制定要提取的字符,比如{"0".."9"},表示要提取文本型 "0"-"9"这10个数,这里我们还需要小数点,所以应该这样去写
=List.Transform(
Text.Split([加分项及分值],"+"),
each Number.From(
Text.Select(_,{"0".."9","."})
)
)
Number.From 的作用是把文本型数值转成数值型,方便我们下一步进行求和
第四步:对转换后的数值进行求和-List.Sum
我们只需要对上一步的结果使用List.Sum求和即可!
最终全部M函数代码如下:
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
res=
Table.AddColumn(源, "总分", each
List.Sum(
List.Transform(
Text.Split([加分项及分值],"+"),
each Number.From(
Text.Select(_,{"0".."9","."}
)
)
)
)
)
in
res
除了以上方法,PQ中也看通过Web类函数的特性来写js,利用js中的正则表达式来提取,感兴趣的同学可以尝试一下,之前我们有分享过类似的案例!