所以我在同一个目录中有不同的.csv文件,第一行作为标题,第一列作为标签。假设文件1如下所示:
name,value1,value2,value3,value4,......
name1,10,20,0,0,...
name2,20,30,0,0,...
name3,30,40,0,0,...
name4,40,50,0,0,...
....
文件2:
name,value1,value2,value3,value4,......
name1,20,30,0,0,...
name2,30,40,0,0,...
name3,40,50,0,0,...
name4,50,60,0,0,...
....
所有.csv文件都具有相同的结构,具有相同的行数和列数
我想要的是这样的东西:
name,value1,value2,value3,value4,......
name1,15,25,0,0,...
name2,25,35,0,0,...
name3,35,45,0,0,...
name4,45,55,0,0,...
....
其中,最后一个文件中的所有值列将是所有.csv文件中这些列中相应值的平均值。所以在结果文件的value1下,我应该有(10+20+…+…)/n,依此类推
csv文件的数量不是固定的,所以我想我需要一个循环
如何在Linux机器上使用python脚本实现这一点
我用awk做这个:
awk '
BEGIN {FS=OFS=","}
FNR==1 {header=$0} # header line
FNR>1 {
sum[FNR,1] = $1 # names column
for (j=2; j<=NF; j++) {
sum[FNR,j] += $j
}
}
END {
print header
files = ARGC - 1 # number of csv files
for (i=2; i<=FNR; i++) {
$1 = sum[i,1] # another treatment for the 1st column
for (j=2; j<=NF; j++) {
$j = sum[i,j] / files
}
print
}
}' *.csv
但我意识到,每个文件中的列名可能都不相同。如果name1只出现在前两个文件中;不在第三个文件中,然后我必须显示一条消息,说它在第三个文件中丢失,但仍然计算其他两个文件的平均值。 我想用字典和计数器就可以了,但我不知道怎么做
展开
pandas
选项posted by Mr Morgan,您还可以使用:如果只想使用标准库,示例如下:
导入csv 从统计导入平均值
如果您想使用pandas,这里是:
作为pd导入
相关问题 更多 >
编程相关推荐