Forum Discussion
Merleau
1 year agoHelper II
Converting list elements based on their lengths
Hello,
One column in my table is a list of strings. I would like to change the strings to lower case if their lenghts is greater than 1.
| Name | Types |
| N1 | A,ABC,B,CDF,DF |
| N2 | H,JKL,BG,DC,C |
Convert to
| Name | Types |
| N1 | A,abc,B,cdf,df |
| N2 | H,jkl,bg,dc,C |
Can somebody help?
Thank you
Here is one way to do this...
= Table.TransformColumns(previousQueryStep, {{"Types", each Text.Combine(List.Transform(Text.Split(_, ","), each if Text.Length(_) > 1 then Text.Lower(_) else _), ","), type text}})Using your example table you end up with...
4 Replies
- jgeddesSuper User
Here is one way to do this...
= Table.TransformColumns(previousQueryStep, {{"Types", each Text.Combine(List.Transform(Text.Split(_, ","), each if Text.Length(_) > 1 then Text.Lower(_) else _), ","), type text}})Using your example table you end up with...
- AlienSxSuper User
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8jNUUFBQ0lFy1HF0ctZx0nF2cdNxcVOK1QFKGQHFPXS8vH10nNx1XJx1nJViYwE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Name " = _t, Types = _t]), chars = List.Buffer({"a".."z", "A".."Z"}), result = Table.TransformColumns( Source, { "Types", (x) => Text.Combine( List.Transform( Text.Split(x, ","), (w) => if List.Contains(chars, w) then w else Text.Lower(w) ), "," ) } ) in result - ThxAlotSuper User
For fun only, to incorporate the power of regex,
import re import numpy as np df['Types']=np.vectorize(lambda string:re.compile(r'[a-z]{2,}(?=\b)',flags=re.I).sub(lambda match:str.lower(match.group(0)),string))(df['Types'])let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8jNUUFBQ0lFy1HF0ctZx0nF2cdNxcVOK1QFKGQHFPXS8vH10nNx1XJx1nJViYwE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Name = _t, Types = _t]), #"Run Python script" = Python.Execute("import re#(lf)import numpy as np#(lf)df['Types']=np.vectorize(lambda string:re.compile(r'[a-z]{2,}(?=\b)',flags=re.I).sub(lambda match:str.lower(match.group(0)),string))(df['Types'])",[df=Source]), df = #"Run Python script"{[Name="df"]}[Value] in df