[已解决] 从txt导入的数据库文档如何通过PQ拆分到不同列

  [复制链接]
查看211093 | 回复166 | 2020-9-16 04:58:38 | 显示全部楼层 |阅读模式
在网站上拉下来的数据是txt格式的,都集中在一列里面。数据格式如下, 每一个的信息都是由8行来显示的:

2QUEENS
STALL 15 4F WELLCOME PLAZA 2410-2432 TAFT LIBERTAD PASAY CITY
Tel No/s :8347191/ 09778831222
Email Address :crewing@2Qmaritime.com
Website :N/A
Official Representative : JAIME MARTIN U PABALAN JR
Status : Valid License
License Validity : 7/21/2016 to 7/21/2020


现在我需要将这个字段拆分成如下的8列数,该如何用PQ来拆分到1行里?
Name
Address
Tel No/s
Email Address
Website
Official Representative
Status
License Validity



9836012005491.rar (7.41 KB, 下载次数: 0)
回复

使用道具 举报

不问天涯远 | 2020-9-16 05:04:38 | 显示全部楼层
你好
我提供一个思路
假设你已经导入了文件,那么这个文件就是一个一列八行的数据,那么怎么拆分呢?首先你的第一行name和add是没有标题的,而其他石有冒号分割的,那么就先插入一列并且是一个这个数据永远不可能用到的符号,比如{之类的,然后合并到原来那列中。然后再拆分列,第一先根据{这个符号拆分,然后再拆分一次使用冒号拆分,现在你有了三列了,再把第一第二列合并内容,并且把{符号替换成null。那么你就完成了标题和内容的拆分,然后可以利用转置方法把行变成列,这样数据就变成两行了,一行是标题,一行是内容。最后把第一行变成header就可以了。这些操作都是不用编程的。
那么后面,假设你有很多行这种数据都读取了,那么你就要用到小技巧,先把所有数据插入列,都编号采用index,得到了1.....n的数字,然后除以8(因为没8行是一个数据),然后去小数位变成整数,这样就把你的数据分类了。属于一个数据的都是一个整数。之后,利用这列再采用透视的功能(不聚合)就可以了(得到了第一行是整数的table),最后去掉第一行,再转置即可。
你可以先做一下,我帮你看看文件。
回复

使用道具 举报

二少 | 2020-9-16 05:12:38 | 显示全部楼层
你好
我提供一个思路
假设你已经导入了文件,那么这个文件就是一个一列八行的数据,那么怎么拆分呢?首先 ...


哥,有点烧脑。原谅我看了一半就已经晕了。
回复

使用道具 举报

炎婴 | 2020-9-16 05:16:38 | 显示全部楼层
哥,有点烧脑。原谅我看了一半就已经晕了。


e,你现在看得懂M语言吗?
回复

使用道具 举报

pzyxxclh | 2020-9-16 05:21:39 | 显示全部楼层
  1. let

  2.   Source = Csv.Document(File.Contents("txt文件存放路径"),[Delimiter="|"]),

  3.   Custom1 = Table.TransformColumns(Table.Combine(List.Transform(Table.Split(Source,9),Table.Transpose)),{},each List.Last(Text.Split(_,":"))),

  4.   Custom2 = Table.FromColumns(Table.ToColumns(Custom1),{"Name","Address","Tel No/s","Email Address","Website","Official Representative","Status","License Validty","x"}),

  5.   Custom3 = Table.RemoveColumns(Custom2,"x")

  6. in

  7.   Custom3
复制代码
回复

使用道具 举报

peigo | 2020-9-16 05:24:39 | 显示全部楼层
方法很多,不唯一。  除最后2步需简单修改公式,其他点点菜单就行了。

let
  源 = Csv.Document(File.Contents("C:\Users\Administrator\Downloads\agency lists.txt"),[Delimiter=":", Columns=2, Encoding=936, QuoteStyle=QuoteStyle.None]),
  更改类型 = Table.TransformColumnTypes(源,{{"Column1", type text}, {"Column2", type text}}),
  筛选的行 = Table.SelectRows(更改类型, each ([Column1]  "")),
  已添加索引 = Table.AddIndexColumn(筛选的行, "索引", 0, 1),
  插入的整除 = Table.AddColumn(已添加索引, "整除", each Number.IntegerDivide([索引], 8), Int64.Type),
  插入的取模 = Table.AddColumn(插入的整除, "取模", each Number.Mod([索引], 8), type number),
  已添加条件列 = Table.AddColumn(插入的取模, "field", each if [取模] = 0 then "Name" else if [取模] = 1 then "Address" else [Column1]),
  已添加条件列1 = Table.AddColumn(已添加条件列, "value", each if [取模] = 0 then [Column1] else if [取模] = 1 then [Column1] else [Column2]),
  删除的其他列 = Table.SelectColumns(已添加条件列1,{"整除", "field", "value"}),
  分组的行 = Table.Group(删除的其他列, {"整除"}, {{"table", each #table(_[field],{_[value]})}}),
  自定义1 = Table.Combine(分组的行[table])
in
  自定义1
回复

使用道具 举报

Gacia.lopez | 2020-9-16 05:31:39 | 显示全部楼层
贴上GIF 不知为何不放动画,所以放压缩文件了,如果第一步删除的那些数据也要的话,就把第2列到最后列合并成一列 其他都一样做法

9836012005492.rar (1.05 MB, 下载次数: 0)
回复

使用道具 举报

邮差 | 2020-9-16 05:34:39 | 显示全部楼层
详情见附件!
9836012005493.zip (16.97 KB, 下载次数: 0)
回复

使用道具 举报

雄蟹 | 2020-9-16 05:39:40 | 显示全部楼层
贴上GIF 不知为何不放动画,所以放压缩文件了,如果第一步删除的那些数据也要的话,就把第2列到最后列合并 ...


非常感谢这个GIF文档!在这个操作步骤的指引下,拓展了我对Power Query整理数据的思路。原来Power Query的功能这么强大!

又跟您学了一招!
回复

使用道具 举报

qyzr | 2020-9-16 05:46:40 | 显示全部楼层
详情见附件!


感谢感谢!用这个文件我把原来的那个txt文件替换进行了操作。很神奇的是速度比较慢,Excel竟然提醒当时的运算文件达到了2G的大小!最终出来的结果是3000多行的数据。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则