2

私はPythonに比較的慣れていませんが、大きな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 と Height2 の上位の値 (検索する必要がある上位の値の数に応じて上位 2 または上位 3) を見つけ、これらの上位の値を持つ行全体を取得する必要があります。提案や可能な回答は大きな助けになります。ありがとう。

4

2 に答える 2

2

あなたは現在これを使用しています:

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

最初の行では、必要なデータの一部を削除します (行全体が必要なため)。3 行目は、2 行目を変更して冗長にすることができます。一緒:

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

これは に分類されHeight1ます。でソートしたい場合はHeight2、 に変更34ます。1 つずつ並べ替えたい場合は、2 回並べ替えるか、少しトリッキーなことを行うことができます。

height.sort(key=lambda x: (int(x[3]), int(x[4])), reverse=True)
于 2012-10-01T04:32:17.223 に答える
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()
于 2012-10-01T04:53:21.040 に答える