我正在尝试打开一个CSV文件,遍历其行并将行的最后一部分转换为通过将现有值乘以浮点数创建的新数字。
CSV文件的 Row[8]
会返回一个字符串,该字符串表示为int
,NaN
或float
。我已经替换了NaN
,发现了切片以将字符串限制为5个字符。然后我尝试使用条件将适当的字符串转换为int
或float
。
for循环的最后一部分,我试图将CSV文件的相应部分乘以float(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]
答案 0 :(得分:0)
row[8]
是一个字符串
type(row[8])
<class 'str'>
条件if isinstance
永远不会被执行。
为什么当您更改为2
然后工作?因为'a' * 2 == 'aa'
答案 1 :(得分:0)
在你的代码中,
都没有 if isinstance(row[8], float):
row[8] = float(row[8])
if isinstance(row[8], int):
row[8] = int(row[8])
将被执行,因为row[8]
的类型为string
。
您需要做的只是将其更改为row[8] = float(row[8])
即可。