如何在CSV文件python中获取和
[在此处输入图像描述][1][在此处输入图像描述][2]我有一个包含14个类别的CSV文件,共303行,我需要找到每个类别的总和。遗憾的是,到目前为止,我所拥有的,对于如何单独和独立地找到每个类别的总和,并没有多大帮助 缩写的14个类别依次为年龄、gen、cpt、rbp、sc、fbs、rer、mhra、eia、sd、spsd、nmv、dt、hd如何在CSV文件python中获取和,python,Python,[在此处输入图像描述][1][在此处输入图像描述][2]我有一个包含14个类别的CSV文件,共303行,我需要找到每个类别的总和。遗憾的是,到目前为止,我所拥有的,对于如何单独和独立地找到每个类别的总和,并没有多大帮助 缩写的14个类别依次为年龄、gen、cpt、rbp、sc、fbs、rer、mhra、eia、sd、spsd、nmv、dt、hd import string with open("train.csv", "r") as f: for hd in f.read ():
import string
with open("train.csv", "r") as f:
for hd in f.read ():13
前几行是这样的
A B C D E f G H I J K L M N
6311145233121502.303060
67 1 4 160 286 0 2 108 1.5 2 3 2
67 1 4 120 229 0 2 129 1 2.6 2 2 7 1Python有一个非常有用的“csv”模块
import csv
with open("train.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
# work on each row as a list
还有一个方便的DictReader,它将CSV的第一行解析为行标题,然后将每一行作为字典提供给您,并将键设置为标题
既然数据是一种易于使用的格式,那么求和就应该很容易了。您可以将每一行映射到float、transpose和sum,并将每一列与(column\u name、column\u sum)配对生成dict:
import csv
with open("train.csv", "r") as f:
r = csv.reader(f)
# pull first row i.e A,B,C,D... to use ad the keys
keys = next(r)
# iterate ober the rows mapping to float and transpose
# with zip(*... so rows become columns, one per key
summed_dict = dict(zip(keys, map(sum, zip(*(map(float, row) for row in r)))))
对于您的输入示例:
A,B,C,D,E,f,G,H,I,J,K,L,M,N
63,1,1,145,233,1,2,150,0,2.3,3,0,6,0
67,1,4,160,286,0,2,108,1,1.5,2,3,3,2
67,1,4,120,229,0,2,129,1,2.6,2,2,7,1
产出:
{'K': 7.0, 'D': 425.0, 'B': 3.0, 'G': 6.0, 'f': 1.0, 'N': 3.0, 'M': 16.0, 'C': 9.0, 'A': 197.0, 'E': 748.0, 'L': 5.0, 'H': 387.0, 'I': 2.0, 'J': 6.4}
您可以使用听写器,但在这里使用它没有真正的优势。Numpy可能是您的朋友:
import numpy as np
# load array from csv
arr = np.loadtxt('data.csv', dtype=float, delimiter=';', skiprows=0)
n = -1
# get n-th row by fany indexing
row = arr[n,:]
print row
print np.sum(row)
m = 2
# get m-th col by fancy indexing
col = arr[:,m]
print col
print np.sum(col)
这几乎是不言自明的。更多信息:我想你指的是csv文件,对吗?文件是什么样子的?文件是A-N,有303行,每个类别有一个数字列表,每行一个,所以所有数字都在标题行之后?或者没有标题,但数据符合您问题中的顺序?@Dandy,不要添加图像,添加前几行Sim不确定numpy做什么。有人告诉我要简化它,但我会查找它,它似乎很有用。如果您想对存储在csv文件中的值执行数字操作(我假设是这样,因为您要求类别/列总和),numpy是一种方法。它基本上实现了多维静态类型数组。事实上,它的部分实现是用C语言实现的,因此它的速度非常快well@Dandy,numpy不是标准库的一部分,如果您有大量数据数组,则需要安装它。numpy非常有效,但对于300行文件,纯python就足够了,@Padraic Cunningham,对于小数据集也可以使用NumPy。与MathPlotLib(=SciPy)相结合,它在某种程度上是MatLab的一个功能完整的替代品,同时保留了Python接口。顺便说一句:大多数发行版已经包含了NumPy。很有可能,他已经安装好了。好的,亲爱的,谢谢你,这很有帮助,不过只是为了确定我是如何安装的,keys=next(r)是让代码在A列开始后继续运行的原因,对吗?@Dandy,当你看文件
next(r)
pull A,B,C,D,E,F,G,H,I,J,K,L,M,N时,它们是键/列,那么r中的每一行都是第63行、第1145行等的其余部分。。zip(*…)转换,因此基本上我们采用垂直/列方向的值,而不是行方向的值,因此每个键都匹配到它下面的值的总和