我開始學習Python。如何計算 csv 檔案中某一列的總和(浮點數)?
這是我到目前為止所做的,但我的代碼沒有給我“金額”(列)的總數:
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"
uj5u.com熱心網友回復:
你可以試試:
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 包含一個標題行,您要匯總的列名為
amount。 - 使用 a
DictReader而不是 areader能夠按列名獲取金額。 - 使用
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
uj5u.com熱心網友回復:
您可以使用 輕松完成此操作sum。csv.reader回傳一個可迭代物件,為每一行提供一個串列,因此我們只需要挑選出正確的列元素,轉換為浮點數,然后將它們全部加起來。此示例用于Decimal在對浮點數求和時給出“預期”結果,但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為要處理的列數。
uj5u.com熱心網友回復:
在 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('Column sum is {column_sum}')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372816.html
