2012-10-01 52 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

相关问题