2014-02-11 50 views
1
f1 f2 f3 f4.....**f277436** (column headers) 
0 9 1 4  0 
56 2 66 8  0 
**(3227 rows...)** 

我想查找每列中非零值的出現次數。例如,在前面提到的那個案例中,那將是[1,2,2,2,...0]我如何使用Python找到這個?使用python查找csv文件列中非零值的出現次數

for k in range(1,7): 
    final=[] 
    f="Dataset/Cross/N_grams_recored/"+str(k)+"_gram.csv" 
    with open(f) as f: 
     csvreader = csv.reader(f) 
     tags = next(csvreader) 
     sums = [0] * len(tags) 
     for count, row in enumerate(csvreader): 
      sums = [int(x) + int(y) for x, y in zip(sums, row)] # finding sum 
    avgs = [x/count for x in sums] 
    print count 
    result_tags = [h for (h, a) in zip(tags, avgs) if a > 0.3] 
## final.append(result_tags) 
filename="Dataset/Cross/N_gram_Features_Pruned/"+str(k)+"_gram.txt" 
filewrite=open(filename,"w")  
filewrite.write(str(result_tags)) 
filewrite.close() 
+1

你的問題和代碼不符 – thefourtheye

+0

是啊,這是怪異和尷尬。 – Alfe

+0

雅我已經計算了總和,我發現平均..問題是我如何更新我的代碼,以找到列中非零值的數量? – user3254544

回答

2

最簡單的方法可能是使用numpy

[137]: 
import numpy as np 
d=np.genfromtxt('temp1.txt',skip_header=1) 
d 
Out[137]: 
array([[ 2., 2., 7., 7., 8., 9., 0., 2., 3., 5.], 
     [ 4., 9., 4., 0., 2., 3., 4., 3., 0., 4.], 
     [ 6., 9., 3., 8., 7., 2., 5., 8., 7., 8.], 
     [ 8., 1., 8., 7., 2., 3., 8., 3., 2., 6.], 
     [ 5., 9., 5., 6., 9., 2., 9., 5., 8., 1.], 
     [ 0., 1., 0., 2., 0., 9., 7., 4., 5., 3.], 
     [ 2., 1., 9., 9., 4., 0., 1., 4., 0., 5.], 
     [ 2., 9., 0., 2., 3., 6., 1., 5., 2., 6.], 
     [ 7., 0., 8., 4., 2., 3., 7., 9., 3., 9.], 
     [ 2., 2., 9., 8., 8., 0., 6., 3., 8., 6.]]) 
In [138]:np.sum(d!=0, axis=0) 
Out[138]: 
array([ 9, 9, 8, 9, 9, 8, 9, 10, 8, 10]) 

數據文件看起來像:

f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 
2 2 7 7 8 9 0 2 3 5 
4 9 4 0 2 3 4 3 0 4 
6 9 3 8 7 2 5 8 7 8 
8 1 8 7 2 3 8 3 2 6 
5 9 5 6 9 2 9 5 8 1 
0 1 0 2 0 9 7 4 5 3 
2 1 9 9 4 0 1 4 0 5 
2 9 0 2 3 6 1 5 2 6 
7 0 8 4 2 3 7 9 3 9 
2 2 9 8 8 0 6 3 8 6