2012-10-01 51 views
2

我對python比較新,我發現它很有用,因爲我確實需要定期從大csv文件中查找值,因此我試圖使用它。如何在csv列中查找最高值並使用Python打印具有這些最高值的整行?

This is my csv file: 
Name, Tag, Size, Height1, Height2, 
Name1, B1, 244,42798,5900 
Name2, B4, 200,22798,2234 
Name3, B5, 240,25798,2745 
Name4, B7, 220,32798,4590 

我試圖使用這段代碼,但我仍然讓他們混亂起來。

import csv 
input = open('file.csv','r') 
number_top_values = raw_input(‘How many top values you need to find?’) #number of top values 
file = csv.reader(input) 
line1 = file.next() 
height = [(row[3],(row[4])) for row in file] 
height.sort(key = lambda x: x[1]) 
height.reverse() 
height = height[:number_top_values] 
print height 

我需要在列找到Height1和身高2頂值(頂部2個或前3等等取決於我需要多少頂值找到),並獲得有這些頂級值整行。任何建議或可能的答案將是一個很大的幫助。謝謝。

回答

2

您目前使用此:

height = [(row[3],(row[4])) for row in file] 
height.sort(key = lambda x: x[1]) 
height.reverse() 

在第一行那裏,你刪除一些你需要的數據(因爲你需要整個行)。第三行可以通過修改第二行而變得冗餘。在一起:

height = list(file) 
height.sort(key=lambda x: int(x[3]), reverse=True) 

This sorts on Height1。如果您想對Height2進行排序,請將3更改爲4。如果要排序的一個,然後其他的,你可以兩次排序或做一些事情有點麻煩:

height.sort(key=lambda x: (int(x[3]), int(x[4])), reverse=True) 
+0

- x [3]或-x [4]將不起作用,因爲x [3]和x [4]是字符串。無論如何,排序技巧+1! –

+0

感謝您提供的所有意見和解答,以及讓我更容易理解代碼的解釋。 – user1710791

+0

@AnujGupta:哦,你說得對;我錯過了。我會編輯我的答案。 – icktoofay

1

天色什麼icktoofay說:)

工作代碼:

import csv 
inputfile = open('file.csv','r') 
#don't forget int() to convert input to integer for slicing 
while(True): 
    try: 
     number_top_values = int(raw_input('How many top values you need to find?')) #number of top values 
    except ValueError: 
     print "Invalid input! Please try again" 
    else: 
     break 
csvfile = csv.reader(inputfile) 
height = list(csvfile)[1:] #exclude first line for labels 
height1 = sorted(height, key = lambda x: int(x[3]), reverse=True)[:number_top_values] 
height2 = sorted(height, key = lambda x: int(x[4]), reverse=True)[:number_top_values] 
# or height.sort(key = lambda x: (int(x[3]),int(x[4])), reverse=True) for double sort 
print height1 
print height2 
inputfile.close() 
+0

感謝您提供的所有意見和解答,以及讓我更容易理解代碼的解釋。感謝答覆,Anuj Gupta和Icktoofay。 – user1710791

+0

哦,整齊,我不知道'reverse'。 +1 – icktoofay

相關問題