python处理csv文件

python处理csv文件的时候,遇到了分组多行求平均的问题

img


如图,根据黄色框分组,红色框求平均,蓝色框正常输出,最后保存到一个新的csv文件中,想问一下各位该怎么办

使用groupby函数按照'Group'列进行分组,使用merge函数将分组求平均的结果和蓝色框的内容合并在一起,并将结果保存到新的CSV文件中

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7498763
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:python对csv文件进行批量处理,修改csv某一列的数据并存储到新的csv文件中
  • 您还可以看一下 李云老师的Python数据清洗实战入门课程中的 csv文件读写小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,我们需要使用Python的csv模块来读取并处理CSV文件。具体步骤如下:

    1. 导入csv模块:
    import csv
    
    1. 打开CSV文件:
    filename = 'input.csv'
    with open(filename, 'r') as file:
        reader = csv.reader(file)
        rows = list(reader)
    

    这将读取CSV文件的每一行数据,并保存到一个列表中。

    1. 创建一个空字典用于存储分组后的数据:
    data = {}
    
    1. 遍历每一行数据,并将需要分组的列值作为字典的键,将其他列的值作为字典的值:
    for row in rows[1:]:
        group = row[0]  # 假设需要分组的列是第一列
        values = row[1:]  # 获取其他列的值
        if group not in data:
            data[group] = []
        data[group].append(values)
    

    这样,我们就将需要分组的数据存储在了data字典中,其中每个键对应一个列表,列表中是该分组的所有行的其他列的值。

    1. 计算每组的平均值:
    averages = {}
    for group, rows in data.items():
        if len(rows) > 0:
            num_rows = len(rows)
            num_cols = len(rows[0])
            sums = [0] * num_cols
            for row in rows:
                for i, value in enumerate(row):
                    sums[i] += float(value)
            averages[group] = [sum_value / num_rows for sum_value in sums]
    

    这里我们首先遍历每个分组的列表,计算每列的总和。然后,通过除以行数计算平均值。最终,将每个分组的平均值保存在averages字典中。

    1. 将结果保存到新的CSV文件:
    output_filename = 'output.csv'
    with open(output_filename, 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(rows[0])  # 写入表头
        for group, average in averages.items():
            writer.writerow([group] + average)
    

    这里我们首先创建一个新的CSV文件,并将得到的平均值写入其中。注意要在每一行数据的开头加上对应的分组值。

    以上就是使用Python处理CSV文件中的分组多行求平均问题的解决方案。如果你有任何问题,请随时向我提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^