Python:如何在CSV文件中汇总一列,同时跳过标题行

时间:2019-03-20 12:40:21

标签: python-3.x csv

试图求和csv文件中的一列,该列的顶部是标题行。我正在尝试将此用于循环,但它只是返回零。有什么想法吗?

CSVFile = open('Data103.csv')
CSVReader = csv.reader(CSVFile) #you don't pass a file name directly to csv.reader
CSVDataList = list(CSVReader) #stores the csv file as a list of lists

print(CSVDataList[0][16])

total = 0
for row in CSVReader:
   if CSVReader.line_num == 1:
        continue 
        total += int(row[16])
print (total)

这是txt中的数据示例: 值,值,值,“ 15,500.05”,00.00、00.00 因此,这些项目将由限定,除非在需要转义的情况下为“”。这是一个非常标准的文件,具有标题行和18列中的约1k行数据。

2 个答案:

答案 0 :(得分:1)

您似乎已经缩进了执行总和的行。应该是这样的:

for row in CSVReader:
    if CSVReader.line_num == 1:
        continue 
    total += int(row[16])

否则,您将只对第一行的值求和,这正是您要跳过的行。

编辑: 既然您说之前的更改不起作用,我建议您使用名为rows的出色Python库。

使用以下CSV(fruits.csv):

id,name,amount
1,apple,3
2,banana,6
3,pineapple,2
4,lemon,5

您可以直接按列名而不是索引访问列:

import rows
data = rows.import_from_csv('fruits.csv')
for fruit_data in data: 
    print(fruit_data.name, fruit_data.amount)
    # output:
    # apple 3
    # banana 6
    # pineapple 2
    # lemon 5

新编辑: 提供数据后,我相信您的情况可以执行以下操作:

import rows
data = rows.import_from_csv('Data103.csv')
print(data.field_names[16])  # prints the field name

total = 0
for row in data: 
    value = row.<column_name> 
    value = value.replace(',', '')  # remove commas
    total += float(value)
print (total)

答案 1 :(得分:1)

您可能要使用Pandas

{{1}}