欧美经典成人在观看线视频_嫩草成人影院_国产在线精品一区二区中文_国产欧美日韩综合二区三区

rowcount(你會用PowerQuery統計字符串中各類字符出現的次數嗎)

rowcount(你會用PowerQuery統計字符串中各類字符出現的次數嗎)

閻來 2025-04-11 科技 23 次瀏覽 0個評論

很多時候我們需要統計單個字符或某種字符出現的次數,那么在PowerQuery中怎么實現呢?

你會用PowerQuery統計字符串中各類字符出現的次數嗎?

01統計字符串中單一字符出現的次數

有小伙伴提了一個問題:“PowerQuery是否有直接統計字符串中指定字符個數的函數”,我翻了下PowerQuery參考,并沒有找到這樣的一個函數。

那有沒有法子用PowerQuery來實現統計字符串中特定字符的出現個數呢?我目前知道的有兩種方法(假設要統計字符串【1-2-3-9】中【-】出現的次數):

= List.Count(Text.PositionOf("1-2-3-9","-",Occurrence.All))

= Text.Length("1-2-3-9")-Text.Length(Text.Replace("1-2-3-9","-",""))

兩種方法殊途同歸,不過我覺得方法一更“優雅”一些。

那還會不會有第三種方法呢?

更進一步,我們可以在這個例子的基礎上進行延伸和拓展。

02統計字符串中出現的數字個數

統計字符串【1-2-3-9】中【數字】出現的次數:

= List.Count(Text.PositionOfAny("1-2-3-9",{"0".."9"},Occurrence.All))

但是如果要統計字符串【李四5676中華234大家庭】中數字出現的次數,則結果就不對:

= List.Count(Text.PositionOfAny("李四5676中華234大家庭",{"0".."9"},Occurrence.All))

上面統計的結果是7,但是我們想要的結果是2。原因在于上面的代碼是把【5676】這一個數字作為四個數字統計了四次,實際上我們需要的是把【5676】作為一個整體統計一次。

那要如何才能得到正確結果呢?這時就必須借助于自定義函數,比如下面這個:

(str as text)=>let

源 = Text.PositionOfAny(str,{"0".."9"},Occurrence.All),

轉換為表 = Table.FromList(源, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

已添加索引 = Table.AddIndexColumn(轉換為表, "索引", 0, 1),

已添加自定義 = Table.AddColumn(已添加索引, "自定義", each

try

if 已添加索引[Column1]{[索引]}+1=已添加索引[Column1]{[索引]+1}

then "drop"

else "keep"

otherwise "end"),

篩選的行 = Table.SelectRows(已添加自定義, each ([自定義] <> "drop")),

自定義1 = Table.RowCount(篩選的行)

in

自定義1

在字符串上調用這個自定義函數就能統計出正確的數字結果。比如字符串【李四5676中華234大家庭】中的數字是2。

所以,只有統計單個數字出現的次數,才能用List.Count()結合Text.PositionOfAny()函數的方法。

如果要統計多個單數字構成的數值的出現次數,則必須用自定義函數曲線實現。

03統計字符串中漢字出現的個數

統計字符串【李四5676中華大家庭】中【漢字】出現的次數:

= List.Count(Text.PositionOfAny("李四5676中華大家庭",{"一".."龥"},Occurrence.All))

轉載請注明來自夕逆IT,本文標題:《rowcount(你會用PowerQuery統計字符串中各類字符出現的次數嗎)》

每一天,每一秒,你所做的決定都會改變你的人生!

發表評論

快捷回復:

評論列表 (暫無評論,23人圍觀)參與討論

還沒有評論,來說兩句吧...