Python 对CSV文件中的每四个元素求平均值
我有一个CSV文件,比如说$n=100$元素。因此,该文件看起来像一个$n$维向量。问题是:如何平均每4个元素并将结果保存在新的csv文件中? 例如,我生成一个随机数列表:Python 对CSV文件中的每四个元素求平均值,python,pandas,csv,average,Python,Pandas,Csv,Average,我有一个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_
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文件。使用索引整数除法对4个值的组和聚合平均值:
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)
您只生成9个数字,而不是100个。range
的stop
参数是生成的数,random.randint
的参数是从中采样一个随机数的范围(包括)。
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)