Python:如何计算 csv 上的浮点数总和
Python: How to calculate sum of floats on csv
我开始学习 Python。如何计算 csv 文件中特定列的总和(浮点数)?
这是我到目前为止所做的,但我的代码没有给出 'amount'(列)的总数:
giftFile = open('input.v0.small.csv')
giftReader = csv.reader(giftFile)
giftData = list(giftReader)
for row in giftReader:
if len(row)>0:
giftData += row['amount']
print('row 0:' + str(giftData[0]))
print("row 1's dollar value: " + str(giftData[1]))
来自 csv 文件的样本:
date,amount,vendor,not sure,who,category
3/11/17, 100.00,"99 PLEDGCharlie S 99PLEDGES.COMAZ",2,Bob Smith,charity
3/11/17, 3.27,"CAFE BEARYUM ORO VALLEY AZ"
您可以使用 sum
轻松完成此操作。 csv.reader
returns 一个为每一行提供一个列表的迭代器,所以我们只需要挑选出正确的列元素,转换为浮点数,然后将它们全部相加。此示例在对浮点数求和时使用 Decimal
给出 'expected' 结果,但如果您愿意,可以使用 float
代替:
import csv
from decimal import Decimal
col = 1
with open('input.v0.small.csv') as giftFile:
reader = csv.reader(giftFile)
header = next(reader)
print(sum(Decimal(x[col]) for x in reader if x[col]))
只需将col
更改为要处理的列数。
在 Python 中打开文件时,应该关闭文件。为避免忘记关闭,请使用上下文管理器。在以列表列表的形式读入数据后,您可以使用列表推导式从指定列中提取数据。然后,使用sum
内置函数进行最后的求和。
from csv import reader
# context manager for reading-in CSV file
with open('input.v0.small.csv', 'r') as read_obj:
csv_reader = reader(read_obj)
data = list(csv_reader)
# list comprehension to extract specified column
ls = [float(row[1]) for row in data[1:]]
# built-in sum function
column_sum = sum(ls)
# print result
print(f'Column sum is {column_sum}')
你可以试试:
import csv
from math import fsum
with open('input.v0.small.csv', 'r') as file:
result = fsum(
float(d['amount']) if d['amount'].strip() else 0
for d in csv.DictReader(file) if d['amount']
)
- 假设:csv-file 包含 header 行,您要汇总的列名为
amount
.
- 使用
DictReader
而不是 reader
以便能够按列名获取金额。
- 使用
fsum
而不是 sum
以避免精度损失。
文件结果
date,amount,vendor,not sure,who,category
3/11/17, 100.00,"99 PLEDGCharlie S 99PLEDGES.COMAZ",2,Bob Smith,charity
3/11/17, 3.27,"CAFE BEARYUM ORO VALLEY AZ"
是
103.27
文件结果
date,amount,vendor,not sure,who,category
3/11/17, 100.00,"99 PLEDGCharlie S 99PLEDGES.COMAZ",2,Bob Smith,charity
3/11/17, 3.27,"CAFE BEARYUM ORO VALLEY AZ"
是
103.27
我开始学习 Python。如何计算 csv 文件中特定列的总和(浮点数)?
这是我到目前为止所做的,但我的代码没有给出 'amount'(列)的总数:
giftFile = open('input.v0.small.csv')
giftReader = csv.reader(giftFile)
giftData = list(giftReader)
for row in giftReader:
if len(row)>0:
giftData += row['amount']
print('row 0:' + str(giftData[0]))
print("row 1's dollar value: " + str(giftData[1]))
来自 csv 文件的样本:
date,amount,vendor,not sure,who,category
3/11/17, 100.00,"99 PLEDGCharlie S 99PLEDGES.COMAZ",2,Bob Smith,charity
3/11/17, 3.27,"CAFE BEARYUM ORO VALLEY AZ"
您可以使用 sum
轻松完成此操作。 csv.reader
returns 一个为每一行提供一个列表的迭代器,所以我们只需要挑选出正确的列元素,转换为浮点数,然后将它们全部相加。此示例在对浮点数求和时使用 Decimal
给出 'expected' 结果,但如果您愿意,可以使用 float
代替:
import csv
from decimal import Decimal
col = 1
with open('input.v0.small.csv') as giftFile:
reader = csv.reader(giftFile)
header = next(reader)
print(sum(Decimal(x[col]) for x in reader if x[col]))
只需将col
更改为要处理的列数。
在 Python 中打开文件时,应该关闭文件。为避免忘记关闭,请使用上下文管理器。在以列表列表的形式读入数据后,您可以使用列表推导式从指定列中提取数据。然后,使用sum
内置函数进行最后的求和。
from csv import reader
# context manager for reading-in CSV file
with open('input.v0.small.csv', 'r') as read_obj:
csv_reader = reader(read_obj)
data = list(csv_reader)
# list comprehension to extract specified column
ls = [float(row[1]) for row in data[1:]]
# built-in sum function
column_sum = sum(ls)
# print result
print(f'Column sum is {column_sum}')
你可以试试:
import csv
from math import fsum
with open('input.v0.small.csv', 'r') as file:
result = fsum(
float(d['amount']) if d['amount'].strip() else 0
for d in csv.DictReader(file) if d['amount']
)
- 假设:csv-file 包含 header 行,您要汇总的列名为
amount
. - 使用
DictReader
而不是reader
以便能够按列名获取金额。 - 使用
fsum
而不是sum
以避免精度损失。
文件结果
date,amount,vendor,not sure,who,category
3/11/17, 100.00,"99 PLEDGCharlie S 99PLEDGES.COMAZ",2,Bob Smith,charity
3/11/17, 3.27,"CAFE BEARYUM ORO VALLEY AZ"
是
103.27
文件结果
date,amount,vendor,not sure,who,category
3/11/17, 100.00,"99 PLEDGCharlie S 99PLEDGES.COMAZ",2,Bob Smith,charity
3/11/17, 3.27,"CAFE BEARYUM ORO VALLEY AZ"
是
103.27