C#控制台应用中处理CSV文件,按年份计算value字段均值
按年份分组计算Value平均值的实现方案
你可以利用LINQ的GroupBy方法结合DateTime的Year属性来完成分组和平均值计算,具体实现如下:
完整代码示例
using (var csv = new CsvReader(reader, config)) { var records = csv.GetRecords<info>().ToList(); // 按年份分组并计算每组的value平均值 var yearlyAverages = records .GroupBy(record => record.date.Year) // 提取date的年份作为分组键 .Select(group => new { Year = group.Key, // 分组对应的年份 AverageValue = group.Average(r => r.value) // 计算当前组的value平均值 }) .ToList(); return yearlyAverages; } public class info { public int value { get; set; } public DateTime date { get; set; } }
关键说明
- 提取年份:通过
record.date.Year可以直接获取DateTime类型字段的年份值,这是分组的核心依据。 - 分组计算:
GroupBy将所有记录按年份归类到不同的分组中Average方法对每个分组内的value字段计算平均值,结果为double类型
- 规范返回类型:如果需要更结构化的返回结果,可以自定义一个类:
public class YearlyAverage { public int Year { get; set; } public double AverageValue { get; set; } }
然后将Select部分修改为:
.Select(group => new YearlyAverage { Year = group.Key, AverageValue = group.Average(r => r.value) })
注意事项
- 确保CSV中的日期格式能被
CsvReader正确解析为DateTime类型,如果有特殊格式,需要在config中配置对应的日期解析规则 - 如果CSV中存在无效日期或空值,建议提前添加校验逻辑(比如过滤掉
date无效的记录)
内容的提问来源于stack exchange,提问作者Shammu
相关产品推荐
相关产品推荐

