如何在Power Query中提取数据——列表篇(4)

2020-03-23 16:37:16 浏览数 (1)

(六)删除指定数据进行提取

1. 删除指定数据进行提取

List.RemoveRange(list as list, index as number, optional count as number) as list

第1参数为数据列表;第2参数为索引数字格式,从0开始;第3参数为删除的数量,默认为1,如果为0则代表不删除,同时(第2参数 第3参数)<=列表值的数量;最终生成的是列表

例:

List.RemoveRange({1..10},0)={2..10}

List.RemoveRange({1..10},3,5)={1..3,9,10}

解释:第2参数索引3代表是第4位,也就是数值4,从此位置开始连续删除之后的5个值(也就是4-8)。

2. 删除空值后进行提取

List.RemoveNulls(list as list) as list

对于列表中的空值进行删除,生成一个新的列表,只有1个参数。也可以理解为对一个列表选择不等于空值。List.Select(列表, each _<>null)

例:

List.RemoveNulls({null,1,2})={1,2}

List.Select({null,1,2},each _<>null)={1,2}

3. 批量删除匹配值后提取

List.RemoveMatchingItems(list1 as list, list2 as list, optional equationCriteria as any) as list

从列表1从删除列表2的指定值,如果没找到则返回原始list1。第1参数为原始列表;第2参数为要删除的值列表;第三参数是可以指定一个可选相等条件来空值的测试。

例:

List.RemoveMatchingItems({1..10},{5..10})={1..4}

List.RemoveMatchingItems({#date(2018,11,11),1..10,"a".."z"},List.Transform({0..364},(x)=>Date.AddDays(#date(2018,1,1),x)))={1..10,"a".."z"}

解释,通过List.Transform函数生成一个2018年的时间列表,这样就可以把原来列表中有关2018年的时间都可以去除。

List.RemoveMatchingItems({1..10},{5}, each_=5)={1..4,6..10}

解释:因为第3参数是=5,则找到等于5的值,并删除

List.RemoveMatchingItems({1..10},{5}, each_<=5)={6..10}

解释:因为第2参数为{5},第3参数为<=5,用第2参数和第3参数做比较,如果第2参数符合第3参数条件,则删除条件即为第3参数;如果第2参数不符合第3参数条件,则返回第3参数的相反值。

List.RemoveMatchingItems({1..10},{4}, each_>5)={5..10}

解释:因为第2参数不符合第3参数的条件,返回的结果是第三

List.RemoveMatchingItems({"a".."z"},{"b"},each_ >="a")={}

解释:因为第2参数符合第3参数,所以删除条件为第3参数,所有的值都大于"a",所以都被删除,返回的是一个空列表。

4. 从尾删除列表的最后几个数据

List.RemoveLastN(list as list, optionalcountOrCondition as any) as any

从列表尾删除N个元素。第1参数是数据列表;第2参数可以是个数也可以是条件,如果是数字则直接删除最后N项的数据,如果是条件,一旦不满足条件即结束。

例:

List.RemoveLastN({1..10}, 3)={1..7}

List.RemoveLastN({1..10}, each _>5)={1..5}

解释:因为从后开始和5比,直到5为止结束。所以返回的是1-5的列表。

List.RemoveLastN({1..10,1}, each _>5)={1..10,1}

解释:因为从后开始,第一个是1,和第2参数的条件比较,是不符合的,所以就结束对比,也就是没有符合删除的条件,返回的就是原列表{1..10,1}。

5. 从头删除列表的最后几个数据

List.RemoveFirstN(list as list, optionalcountOrCondition as any) as any

从列表头删除N个元素。第1参数是数据列表;第2参数可以是个数也可以是条件,如果是数字则直接删除最初的N项数据,如果是条件,一旦不满足条件即结束。

例:

List.RemoveFirstN({1..10},3)={4..10}

List.RemoveFirstN({1..10}, each _<5)={5..10}

解释:因为从头开始和小于5比,直到5为止结束。所以返回的是5-10的列表。

List.RemoveFirstN({10,1..10}, each _<5)={10,1..10}

解释:因为从后开始,第一个是10,和第2参数的条件比较,是不符合的,所以就结束对比,也就是没有符合删除的条件,返回的就是原列表{10,1..10}。

6. 根据新列表删除旧列表中的值

List.RemoveItems(list1 as list, list2 as list) as list

第1个参数是需要被替换的列表;第2个参数是去要删除的值列表;返回生成的是新列表格式。

例:

List.RemoveItems({1..10},{5..10})={1..4}

List.RemoveItems({1,2,3,2,1},{1,2})={3}

List.RemoveItems({"a","b","c",1,2,3,"一","二"},{"a".."z"})={1..3,"一","二"}

解释:因为第2参数是英文字母的列表,所以把第1参数旧列表中所有英文26个字母单字都删除了。

问:那如何删除列表中值包含"a"的所有元素?

List.RemoveItems({"ab","bc"},List.FindText({"ab","bc"},"a"))={"bc"}

解释:因为要考虑到包含,可以参考4List.FindText函数,找到哪些包含"a"的列表值并生成一个新的需要删除的列表,最后通过List.RemoveItems函数来进行删除。

0 人点赞