我在一个文件夹中将大约20个excel文件保存为CSV。每个excel文件都有保存在第一,第二和第三列中的数字。我试图读取所有文件的第一列,所有文件的第二列,以及python中使用CSV模块的所有文件的第三列,并计算每列的平均值和标准差并保存这些结果在一个单独的excel中。请帮忙....这是我到目前为止...我怎么能单独访问每一列?
import csv
import os
from numpy import array
path="A:\\hello\\folder"
dirList=os.listdir(path)
for file in dirList:
fullpath=os.path.join(path,file)
## print fullpath
with open(fullpath, 'rb') as f:
[[val for val in line.split(',')] for line in f.readlines()]
## print line
nums = array([line])
for row in nums:
print row.mean()
答案 0 :(得分:2)
list comprehension的工作方式类似于向后循环,可以自动为您构建list
。如果你将这些与内部的“列”和外部的“行”嵌套,你应该得到一个矩阵东西(嵌套列表结构):
nums = [[int(val) for val in line.split(',')] for line in my_file.readlines()]
或者如果你有一个csv阅读器对象,它可能是这样的:
nums = [[int(val) for val in line] for line in my_csv_reader]
现在,由于上面的列表理解,你已经在一个名为nums
的变量中得到了矩阵。
然后您应该使用numpy来计算您的统计数据。这很好,因为您可以非常轻松地访问numpy数组的列,当您这样做时,会以numpy数组的形式返回列。 numpy数组也碰巧有平均值和标准差的内置方法。您可以将nums
转换为numpy数组,只需将其传递给array()
构造函数:
from numpy import array
anums = array(nums)
然后,如果要遍历列,请使用数组切片表示法和作为每个numpy数组成员的shape
变量:
# The 1 index of anums.shape should tell you how many columns you have
for c in range(anums.shape[1]):
column = anums[:,c]
col_mean = column.mean()
col_std = column.std()
# Do something with these variables here, probably