【发布时间】:2016-01-27 11:44:39
【问题描述】:
我正在尝试打开一个 CSV 文件,遍历其行并将行的最后一部分转换为通过将现有值与浮点数相乘而创建的新数字。
CSV 文件的Row[8] 返回一个字符串,该字符串表示为int、NaN 或float。我已经替换了NaN,发现了关于将字符串限制为 5 个字符的切片。然后我尝试使用条件将适当的字符串转换为int 或float。
for 循环的最后一部分,我试图将 CSV 文件的适当部分乘以浮点数(1.98),这就是我得到错误的地方(TypeError: can't multiply sequence by non-int of type 'float')。如果我将其更改为 2,即 int,则脚本运行。
我觉得问题一定存在于使用if else 到int 或float 的字符串转换中,但我不确定在哪里。任何提示将不胜感激。
for row in csv_f:
row[8] = row[8][:5]
if isinstance(row[8], float):
row[8] = float(row[8])
if isinstance(row[8], int):
row[8] = int(row[8])
row[8] = row[8] * 1.9
print row[8]
【问题讨论】:
-
isinstance()在这两种情况下都不会成立,因为row[8]始终是一个字符串。如果您对自己的数据有信心,可以改用'.' in row[8]作为浮点数的测试。 -
乘以一个 int 是可行的,因为您正在乘以字符串的实例。在您的情况下,如果您在行值中有
"9.99"并乘以整数 2,则变为"9.999.99"。
标签: python python-2.7 csv