import csv
path1=r'/Users/Desktop/forks.csv'
path2=r'/Users/Desktop/forks1.csv'
outdata=[]
count=0
i=0
with open(path1,'rb') as input:
reader=csv.reader(input)
for row in reader:
if i==0:
i=i+1
outdata.append(row)
continue
if int(row[5])>0:
row.append(1)
outdata.append(row)
count=count+1
print count
else:
row.append(0)
outdata.append(row)
count=count+1
print count
with open (path2,'wb') as output:
writer=csv.writer(output,delimiter=',')
writer.writerows(outdata)
我有一个大表,我想为每一行添加一个带有布尔值的列。如果列6大于0,则应为1.如果为0,则应为零。 <循环停止
58542
58543
58544
58545
58546
58547
58548
Traceback (most recent call last):
File "/Users/Documents/workspace/datamining/opensource/label.py", line 18, in <module>
if int(row[5])>0:
ValueError: invalid literal for int() with base 10: ''
表中的信息如下,这意味着else循环没有执行。我在小表中测试,代码工作。我不知道为什么它不能在大型数据集中工作?
58547 1
58548 1
58549 0
58550 0
答案 0 :(得分:0)
ValueError: invalid literal for int() with base 10: ''
您将一个空值作为参数传递给int
。 int
显然无法将空值转换为整数。
答案 1 :(得分:0)
看起来第6列是空白的(空)而不是包含可以转换为整数的字符串。 else
块未被执行,因为引发了异常。尝试:
if row[5] and int(row[5])>0:
在将其转换为row[5]
之前检查空int
。在此比较中,空字符串''
的计算结果为False
,因此应触发else
块。