试图求和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行数据。
答案 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}}