将包装的 table 数据转换为列
Convert wrapped table data to columns
我正在尝试使用 power bi 进行网络抓取,我正在使用来自以下站点的数据:
https://pt.wikipedia.org/wiki/Jogo_do_bicho
通过站点 URL 后,数据按以下格式组织:
![截图1][1]
[1]: https://i.stack.imgur.com/HPjE7.png
其中数字是与具有特定千的动物相关的索引,如何将所有内容组织到包含所有索引的列中?
我附上了一个例子:
![截图2][2]
[2]: https://i.stack.imgur.com/cxWbU.png
稍后我会尝试添加详细信息,但我认为这会起作用:
let
Source = Web.Page(Web.Contents("https://pt.wikipedia.org/wiki/Jogo_do_bicho")){0}[Data],
ToLists = List.Skip(Table.ToColumns(Source),1),
#"Converted to Table" = Table.FromList(ToLists, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandListColumn(#"Converted to Table", "Column1"),
#"Added Custom" = Table.AddColumn(#"Expanded Column1", "Pivot", each if Text.Length([Column1]) = 2 then "Group" else "Animal"),
#"Added Index" = Table.AddIndexColumn(#"Added Custom", "Index", 0, 1),
#"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 2), Int64.Type}}),
#"Pivoted Column" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Pivot]), "Pivot", "Column1"),
#"Split Column by Delimiter" = Table.SplitColumn(#"Pivoted Column", "Animal", Splitter.SplitTextByDelimiter("#(lf)#(cr)", QuoteStyle.Csv), {"Animal", "Values"}),
#"Trimmed Text" = Table.TransformColumns(#"Split Column by Delimiter",{{"Animal", Text.Trim, type text}, {"Values", Text.Trim, type text}}),
#"Changed Type" = Table.TransformColumnTypes(#"Trimmed Text",{{"Group", Int64.Type}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Index"}),
#"Sorted Rows" = Table.Sort(#"Removed Columns",{{"Group", Order.Ascending}})
in
#"Sorted Rows"
编辑: 这里的关键是使用 Table.ToColumns
将 table 转换为列列表。这会将它变成一个列表列表,我们可以将其转换为 table 并扩展为一个长列。
将所有列堆叠成一列后,我们希望将组 ID 与详细信息分开,在这种情况下,我们可以通过检查文本的长度并定义一个自定义列来标记每个列具有不同数据类别的行。
有了行的分类,我们想要旋转新的自定义列,但我们需要一个索引列,以便它知道什么保持在一起。添加一个索引列和整数除以二,得到 0,0,1,1,2,2,3,3,...
这样每一对都有自己的唯一 ID。现在我们终于可以转向了。
旋转后,根据需要进行任何清理,例如拆分列、修剪空格、更改列类型、删除不需要的列和排序。
我正在尝试使用 power bi 进行网络抓取,我正在使用来自以下站点的数据:
https://pt.wikipedia.org/wiki/Jogo_do_bicho
通过站点 URL 后,数据按以下格式组织:
![截图1][1] [1]: https://i.stack.imgur.com/HPjE7.png
其中数字是与具有特定千的动物相关的索引,如何将所有内容组织到包含所有索引的列中?
我附上了一个例子:
![截图2][2] [2]: https://i.stack.imgur.com/cxWbU.png
稍后我会尝试添加详细信息,但我认为这会起作用:
let
Source = Web.Page(Web.Contents("https://pt.wikipedia.org/wiki/Jogo_do_bicho")){0}[Data],
ToLists = List.Skip(Table.ToColumns(Source),1),
#"Converted to Table" = Table.FromList(ToLists, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandListColumn(#"Converted to Table", "Column1"),
#"Added Custom" = Table.AddColumn(#"Expanded Column1", "Pivot", each if Text.Length([Column1]) = 2 then "Group" else "Animal"),
#"Added Index" = Table.AddIndexColumn(#"Added Custom", "Index", 0, 1),
#"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 2), Int64.Type}}),
#"Pivoted Column" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Pivot]), "Pivot", "Column1"),
#"Split Column by Delimiter" = Table.SplitColumn(#"Pivoted Column", "Animal", Splitter.SplitTextByDelimiter("#(lf)#(cr)", QuoteStyle.Csv), {"Animal", "Values"}),
#"Trimmed Text" = Table.TransformColumns(#"Split Column by Delimiter",{{"Animal", Text.Trim, type text}, {"Values", Text.Trim, type text}}),
#"Changed Type" = Table.TransformColumnTypes(#"Trimmed Text",{{"Group", Int64.Type}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Index"}),
#"Sorted Rows" = Table.Sort(#"Removed Columns",{{"Group", Order.Ascending}})
in
#"Sorted Rows"
编辑: 这里的关键是使用 Table.ToColumns
将 table 转换为列列表。这会将它变成一个列表列表,我们可以将其转换为 table 并扩展为一个长列。
将所有列堆叠成一列后,我们希望将组 ID 与详细信息分开,在这种情况下,我们可以通过检查文本的长度并定义一个自定义列来标记每个列具有不同数据类别的行。
有了行的分类,我们想要旋转新的自定义列,但我们需要一个索引列,以便它知道什么保持在一起。添加一个索引列和整数除以二,得到 0,0,1,1,2,2,3,3,...
这样每一对都有自己的唯一 ID。现在我们终于可以转向了。
旋转后,根据需要进行任何清理,例如拆分列、修剪空格、更改列类型、删除不需要的列和排序。