【问题标题】:Calculating Cell Averages of Multiple .csv Files in Python在 Python 中计算多个 .csv 文件的单元格平均值
【发布时间】:2017-06-12 21:33:02
【问题描述】:

我有很多 csv 文件,我需要计算每个特定单元格的平均值。下面是这些 csv 文件的简化示例。在我的实际文件中,值字段不止一个,但为简单起见,我只放一个作为示例。

文件0.csv:

Latitude, Longitude, Value 23, 97, 1 24, 97, 5 25, 97, 6 26, 97, 4

文件1.csv:

Latitude, Longitude, Value 23, 97, 7 24, 97, 4 25, 97, 2 26, 97, 9

每个文件都有相同的纬度/经度和相同数量的行/列,我只需要创建一个包含每个纬度/经度平均值的新 csv。

所需输出 csv 的示例:

Latitude, Longitude, Value 23, 97, 4 24, 97, 4.5 25, 97, 4 26, 97, 6.5

另一个注意事项:我的 csv 文件中确实有一些 NoData 值(给定值 -999.9),这可能会产生一些平均问题。

【问题讨论】:

    标签: python csv


    【解决方案1】:

    如果您对 PySpark 或 Pandas 库有经验,您可以使用他们的 read_csvgroupby 方法。否则,另一种选择是使用open() 打开文件并使用 Python IO 读取它,然后手动添加到二维列表,同时跟踪每个列表中的元素数量。例如,

    values = []
    for line in file:
        values.append([line.split(','), 1])
    
    counter = 0
    
    for file2 in files:
        for line in file2:
            if counter > values.length:
                values.append([line.split(','), values[counter][1] + 1])
            else:
                values[counter] = [map(lambda x, y: x + y, values[counter][0], line.split(',')), values[counter][1] + 1]
    
    values[i] = [[j / values[i][1] for j in values[i][0]] for i in range(len(values))]
    

    总体前提相当简单;代码有点乱。如果您要经常以这种方式处理数据,我建议您使用 PySpark 或 Pandas。在纯 Python 中可能需要 20 行代码的东西在这些库中只需要 2-3 行代码。

    【讨论】:

      【解决方案2】:

      读取 CSV 文件:

      def read_CSV_to_matrix(filename):
          matrix = []
          with open(str(filename)) as f:
              for line in f:
                  matrix.append(int(line.strip().split(",")))
          return matrix
      

      然后你遍历你的两个矩阵:

      for index, line in matrix1:
          # for each line in F0.csv, print element 1, 2 and the average
          # of element 3 in the both matrices
          print(line[0], line[1], (line[2]+matrix2[index][2])/2)
      

      免责声明:我是菜鸟(只有 2 年的 Python 3 经验)

      【讨论】:

      • 一般来说,纯粹在,上拆分是不可取的。举个例子:"a","b,c", "d" 它只有 3 个数据元素,但如果你只用逗号分割,它会给出 4 个项目。 Python有很多csv解析模块如csv
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 2014-05-30
      • 2013-05-10
      • 1970-01-01
      • 2013-07-19
      相关资源
      最近更新 更多