我的表中有许多列,这些列的文本值可分为几类-例如,“ ABC”列具有9000行,但是每一行都必须具有{{A“,” B“,” C“}中的值。其他列(如性别)为“ M” /“ F” /空
对于每列,我想就地将其转换为整数列表-因此A:1,B:2,C:3等。
我一直在尝试使用List.Distinct
将值提取到临时表中,向其添加索引列并使用联接基于临时表中的映射来转换初始列。但是,这似乎很慢,我不确定如何在表中的所有列上运行它(或至少Table.ColumnsOfType(Source, {type nullable text})
选择分类列...)。
有什么建议?
性别 | 水果 | [...] |
---|---|---|
F | 猫 | |
F | 狗 | |
中号 | 柠檬 | |
中号 | 狗 | |
中号 | 柠檬 | |
空值 | 猫 | |
中号 | 狗 |
性别 | 水果 | [...] |
---|---|---|
1个 | 1个 | |
1个 | 2 | |
2 | 3 | |
2 | 2 | |
2 | 3 | |
空值 | 1个 | |
2 | 2 |
在PowerQuery中,这似乎适用于任意数量的列
将所有null替换为其他内容,这里+ = +
添加索引
取消枢纽
删除重复项
组,向每个组添加索引
合并回原始文件并扩展
斥责
删除多余的列
之前和之后:
完整代码:
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Replaced Value" = Table.ReplaceValue(Source,null,"+=+",Replacer.ReplaceValue,Table.ColumnNames(Source)),
#"Added Index" = Table.AddIndexColumn(#"Replaced Value", "Index", 0, 1),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
// derive a table of replacements
#"Removed Duplicates" = Table.Distinct(#"Unpivoted Other Columns", {"Attribute", "Value"}),
#"Grouped Rows" = Table.Group(#"Removed Duplicates", {"Attribute"}, {{"GRP", each Table.AddIndexColumn(_, "Index2", 1, 1), type table}}),
#"Expanded GRP" = Table.ExpandTableColumn(#"Grouped Rows", "GRP", {"Value", "Index2"}, {"Value", "Index2"}),
//replace originals
#"Merged Queries" = Table.NestedJoin(#"Unpivoted Other Columns",{"Attribute", "Value"},#"Expanded GRP",{"Attribute", "Value"},"EG",JoinKind.LeftOuter),
#"Expanded Table1" = Table.ExpandTableColumn(#"Merged Queries", "EG", {"Index2"}, {"Index2"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Table1",{"Value"}),
#"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[Attribute]), "Attribute", "Index2", List.Sum),
#"Removed Columns1" = Table.RemoveColumns(#"Pivoted Column",{"Index"})
in #"Removed Columns1"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句