如何在 Excel 中组合具有不同列名和列顺序的多个 CSV 文件?
Posted
技术标签:
【中文标题】如何在 Excel 中组合具有不同列名和列顺序的多个 CSV 文件?【英文标题】:How can I combine multiple CSV files with different column names and column order in Excel? 【发布时间】:2020-11-24 22:01:58 【问题描述】:我有 350 多个 CSV 文件需要合并到一个汇总文件中。 Using Power Query for Excel,我可以在几分钟内轻松合并所有文件。但是,经过检查,并非所有文件都遵循相同的列顺序或名称。例如,一些文件经过:
first, last, address, city, state, username
但其他一些文件通过:
address1, address2, city, state, last_name, first_name, age
使用 Power Query、Excel、VBA 或其他工具 - 有没有办法有效地合并具有不同列名和列顺序的多个 CSV 文件?我尝试在线搜索,但没有一个解决方案与我正在寻找的内容相关 (example)。
上面例子的最终结果应该是这样的:
username, last_name, first_name, age, address1, address2, city, state
一张纸中不存在的任何额外列都可以是空白的(或null
),并且最终的列顺序无关紧要,因为以后可以重新排列。
【问题讨论】:
文件是否有标题,您可以检查它们以了解它们的顺序? 【参考方案1】:类似于this related post,Table.Combine 函数应该可以解决问题,假设您有要匹配列的标题。
通过从文件夹加载加载 CSV 文件,将 CSV 转换为表格格式并提升标题,然后与 Table.Combine
结合。
let
Source = Folder.Files("C:\Path\To\Folder\With\CSVs"),
#"Added Custom" = Table.AddColumn(Source, "CSV", each Table.PromoteHeaders(Csv.Document([Content]))),
#"Combine CSVs" = Table.Combine(#"Added Custom"[CSV])
in
#"Combine CSVs"
【讨论】:
Table.Combine
看起来像我需要的东西。我运行了您提供的查询,当我查看预览时,它看起来像预期的那样工作。但是,当我保存并加载新合并的数据时,到目前为止,它仍在加载和计数 30+ 百万行。我知道我总共只有 100k+ 行。为什么它会产生这么多?
我不知道这是怎么回事,除非它正在拾取该文件夹中您不打算处理的其他文件。如果您在#"Added Custom"
之前将文件列表过滤到少数几个,它会像您预期的那样运行吗?
该文件夹只有我正在合并的 CSV。我只用了 5 个文件就完成了,它按预期出来了。然而,如果我对同一个文件夹中的所有 350 个文件都这样做,它会达到数百万。有限制吗?我在“添加列”>“自定义列”中添加了您的公式。运行后,我展开新的自定义列。然后,我预览了所有列,在预览中两次看起来都像预期的结果
当我回去手动统计一小批文件的记录总数时,应该是6000条。但是当我对同一小批文件运行查询时,它是 60,000。所以我看了看桌子,它被复制了。我删除了骗子,然后它最终与我手动计算的总数相匹配。有什么办法可以防止重复?
我无法重现您所描述的复制行为,所以我不知道发生了什么。以上是关于如何在 Excel 中组合具有不同列名和列顺序的多个 CSV 文件?的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA SQL UNION SUM 对具有不同列名的表进行 GROUP BY
Python Pandas - 具有不同列的 Concat 数据框忽略列名