如何在CSV文件python中获取和

如何在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 ():

[在此处输入图像描述][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 ():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 1

Python有一个非常有用的“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(*…)转换,因此基本上我们采用垂直/列方向的值,而不是行方向的值,因此每个键都匹配到它下面的值的总和