【问题标题】:Averaging out every four elements in a CSV file平均 CSV 文件中的每四个元素
【发布时间】:2021-02-16 05:50:21
【问题描述】:

我有一个 CSV 文件,其中包含 $n=100$ 个元素。所以文件看起来像一个 $n$ 维向量。问题是:如何平均每 4 个元素并将结果保存在新的 csv 文件中?

例如我生成一个随机数列表:

import random
my_random_list = []
for i in range(0,9):
    n = random.randint(1,100)
    my_random_list.append(n)

df = pd.DataFrame(my_random_list)
df.to_csv('my_csv.csv', index=False, header=None)

这类似于我的代码。现在,我想创建一个新的 csv(因为我已经有了 csv 格式的数据),在其中平均并保存前 4 个元素,然后是接下来的 4 个,等等。所以我最终会得到一个只有 25 个元素的 csv 文件.

【问题讨论】:

  • 您只生成 9 个数字,而不是 100 个。rangestop 参数是生成的数字数量,random.randint 的参数是范围(包括)样本一个随机数。

标签: python pandas csv average


【解决方案1】:

DataFrame.groupby 与索引的整数除法一起用于4 个值的组并聚合mean

np.random.seed(2021)

df = pd.DataFrame({'a':np.random.randint(1,10, size=10)})
print (df)
   a
0  5
1  6
2  1
3  7
4  6
5  9
6  7
7  7
8  7
9  7

df1 = df.groupby(df.index // 4).mean()
print (df1)
      a
0  4.75
1  7.25
2  7.00

详情

print (df.index // 4)
Int64Index([0, 0, 0, 0, 1, 1, 1, 1, 2, 2], dtype='int64')

大家一起:

df = pd.read_csv(file, header=None)
df1 = df.groupby(df.index // 4).mean()
df1.to_csv('my_csv.csv', index=False, header=None)
    

【讨论】:

    【解决方案2】:
    import pandas as pd
    import random
    import csv
    
    # FIRST PART -- GENERATES THE ORIGINAL CSV FILE
    
    my_random_list = []
    for i in range(0,100):
        n = random.randint(1,100)
        my_random_list.append(n)
    
    df = pd.DataFrame(my_random_list)
    df.to_csv('my_csv.csv', index=False, header=None)
    
    # SECOND PART -- POPULATES A LIST WITH THE CONTENTS OF THE
    #                ORIGINAL CSV FILE
    
    file_CSV = open('my_csv.csv')
    data_CSV = csv.reader(file_CSV)
    list_CSV = list(data_CSV)
    
    
    # THIRD PART -- GENERATES A NEW LIST CONTAINING
    #               THE AVERAGE OF EVERY FOURTH ELEMENT
    #               AND ITS THREE PREDECESSORS
    
    new_list = []
    for i in range(0,len(list_CSV)):
        if(i%4==0):
            s =     int(list_CSV[i+0][0])
            s = s + int(list_CSV[i+1][0])
            s = s + int(list_CSV[i+2][0])
            s = s + int(list_CSV[i+3][0])
            s = s/4
            new_list.append(s)
        i = i + 1
    
    # FOURTH PART -- GENERATES A NEW CSV
    
    df = pd.DataFrame(new_list)
    df.to_csv('new_csv.csv', index=False, header=None)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 2021-10-29
      相关资源
      最近更新 更多