python - 使用 Python 对 csv 中的列求和

标签 python csv

我处理大型 csv 文件并想测试我们是否可以对一个数字求和 使用 Python 的专栏。我生成了一个随机数据集:

id,first_name,last_name,email,gender,money
1,Clifford,Casterou,ccasterou0@dropbox.com,Male,53
2,Ethyl,Millichap,emillichap1@miitbeian.gov.cn,Female,58
3,Jessy,Stert,jstert2@gnu.org,Female,    
4,Doy,Beviss,dbeviss3@dedecms.com,Male,80
5,Josee,Rust,jrust4@epa.gov,Female,13
6,Hedvige,Ahlf,hahlf5@vkontakte.ru,Female,67

在第 3 行,您会注意到缺少值(我删除了该数据 测试的目的。)

我写了代码:

import csv
with open("mock_7.txt","r+",encoding='utf8') as fin:
    headerline = fin.readline()

    amount = 0
    debit = 0
    value = 0
    for row in csv.reader(fin):
    #     var = row.rstrip()
        value =row[5].replace('',0)
        value= float(value)
        debit+=value
    print (debit)

我得到了错误:

Traceback (most recent call last):
  File "sum_csv1_v2.py", line 11, in <module>
    value+= float(value)
TypeError: must be str, not float

由于我是 Python 的新手,我的计划是将空单元格转换为零,但我想我在这里遗漏了一些东西。此外,我的脚本基于逗号分隔文件,但我确信它不适用于其他分隔文件。你能帮我改进这段代码吗?

最佳答案

原始异常,现在丢失在编辑历史中,

TypeError: replace() argument 2 must be str, not int

str.replace() 的结果期待字符串参数,但您传递的是整数零。您可以在转换前简单地检查空字符串,而不是替换:

value = row[5]
value = float(value) if value else 0.0

另一种选择是捕捉潜在的ValueError:

try:
    value = float(row[5])

except ValueError:
    value = 0.0

这可能会隐藏该列包含“无效”值而不仅仅是缺失值的事实。

请注意,如果您传递了字符串参数,最终结果可能不是您所期望的:

In [2]: '123'.replace('', '0')
Out[2]: '0102030'

In [3]: float(_)
Out[3]: 102030.0

您可以看到一个空字符串,因为“针”最终会替换字符串中的每个字符。


问题中的最新异常,在修复其他错误后,是 float(value) 转换工作的结果

value += float(value)

等于:

value = value + float(value)

作为异常(exception)状态,字符串和 float 不能混用。

关于python - 使用 Python 对 csv 中的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50759525/

相关文章:

python - 处理类中的 tensorflow session

python - 如何在 Python 中提取多个 JSON 项?

python - 遍历python中的dict和list

java - 使用 CSVBuilderService 保存 CSV?

json - Powershell JSON管道将多个值扩展为一列csv

regex - 从 csv 文件的整数字段中删除文本

c - 仅在第一行写入 csv 文件时矩阵输出错误 [C]

python - 让 Tkinter 等到按下按钮

python - 文件未发布

c# - 跳过 HttpResponseMessage Content.ReadAsStream 的第一行(CSV 标题行)