我有一个很大的 csv 文件(一百万行),我将其导入到了 excel 中。我必须做一个简单的操作,手动操作很容易,但我应该对数千个分组进行操作,所以我正在寻找一个自动化系统来执行此操作。
我试着解释一下:我将具有前 2 个公共列数据的行分组,即示例图片中选择的行(具有属性 6 和 0101)。我将它们称为源行。
我需要创建一个新行,其前两列具有相同的两个值(6 和 0101);此新行中的其他值必须是源行各列的总和(在示例中结果应为 1,1,2,0,0,2,0,1....)。
图片中选择的源行应删除。
然后该过程应继续进行下一个分组(7 和 0101)、(8 和 0101)等等...直至最后。
我不太擅长使用 excel(或其他软件)来自动执行操作。我想知道 excel 中是否有简单的方法,或者是否可以通过 bash 脚本来完成 o 在数据库软件中加载 csv 文件并对其进行详细说明并提取新的 csv 文件。任何简单的解决方案都会很有趣。
我希望我的英语能被理解,非常感谢您的帮助!
附言:请记住我是新手...最简单就是最好!:)
答案1
以下是使用 Power Query 的示例,可在 Windows Excel 2010+ 和 Office 365 中使用
使用 Power Query
Data => Get&Transform => from Text/CSV
并选择文件 => 转换- 当 PQ 编辑器打开时:
Home => Advanced Editor
- 记下第二行代码中的路径
- 将下面的 M 代码粘贴到您所看到的位置
- 将第 2 行的路径名改回最初生成的路径名。
- 阅读评论并探索
Applied Steps
以了解算法 - 编码方式应适应任意数量的列
M 代码
let
//Read in CSV document and convert to table
csvSource = Csv.Document(File.Contents("C:\users\ron\desktop\test.csv"),[Delimiter=",", Encoding=1252, QuoteStyle=QuoteStyle.None]),
Source = Table.PromoteHeaders(csvSource,[PromoteAllScalars = true]),
//type first two columns as Text and
//type all columns after first two as integers (but could change to floats if need be
#"Changed Type" = Table.TransformColumnTypes(Source,
List.Transform(List.FirstN(Table.ColumnNames(Source),2), each {_, Text.Type}) &
List.Transform(List.RemoveFirstN(Table.ColumnNames(Source),2), each {_, Int64.Type})),
//create dynamic list of Sum functions for the Table.Group command
//we will sum all columns except the first two
//so need to create a list of a sum function for each column in the table
colsToSum= List.RemoveFirstN(Table.ColumnNames(#"Changed Type"),2),
sumFunction = List.Transform(colsToSum,
(C) => {C, each List.Sum(Table.Column(_, C)), type number}),
//Group on first two columns and aggregate with Sum
groupSum = Table.Group(#"Changed Type",
List.FirstN(Table.ColumnNames(#"Changed Type"),2),
sumFunction)
in
groupSum
来源 作为 csv 文档
col1,col2,col3,col4,col5
1,0101,0,1,0
1,0101,0,2,1
1,0101,0,3,0
1,0101,1,4,1
2,0101,0,5,0
2,0101,0,6,1
2,0102,1,7,0
2,0102,0,8,1
3,0101,0,1,0
3,0101,0,2,1
3,0101,0,3,0
3,0101,1,4,1
4,0101,0,5,0
4,0101,0,6,1
4,0101,0,7,0