无法在python中输入for循环

时间:2017-02-17 19:33:10

标签: python

这是我的data.csv

a,1,1-Jan-2017
a,2,3-Jan-2017
a,4,14-Feb-2017
b,21,1-Dec-2016
b,7,28-Nov-2016

我的目标是在下面打印作为最终列表。格式是唯一的(first_column),no.of occurences

a,3
b,2 

写在python脚本下面但无法输入第二个块来打印'第二个块'虽然相同的逻辑在前一个循环中工作正常。

import csv

with open('/home/user/python/data.csv') as csvfile :
    DataCaptured = csv.reader(csvfile,delimiter=',')
    UniqueValues = []
    FinalList = []

    for row in DataCaptured :
            if row[0] not in UniqueValues :
                    UniqueValues.append(row[0])

    print 'Unique values are:\n' + str(UniqueValues)

    for unique in UniqueValues :
            counter = 0
            print 'First block',unique
            for row in DataCaptured :
                    print 'Second block'
                    if unique == row[0] :
                            counter = int(counter)+1
            FinalList.append(unique+','+str(counter))

    print 'Final list:\n' + str(FinalList)

2 个答案:

答案 0 :(得分:4)

这是因为你已经在第一个循环之后读完了整个文件;此时读者的迭代器中没有更多的行。在第一个csvfile.seek(0)循环后使用for返回到文件的开头,它将起作用。

答案 1 :(得分:1)

您可以稍微简化程序,只迭代文件一次:

import numpy as np

df = df.replace('', np.nan)
df['doc_type'] = np.where(df.b_id.isnull() | (df.a_score >= df.b_score), 
                          np.where(df.a_id.isnull(), None, 'a'), 'b')
df