2016-11-22 7 views
-1

複数の行を持つ大きなデータセットがあり、すべての行のうち最大値をindex[2]に戻したいとします。したがって、以下の例では20を返すようにします。次の例は、最大値ではなく、インデックスに値を表示するだけです。複数のインデックスの最大/最小値を取得する方法

1,"Goroka",10,"Pacific" 
2,"Madang",20,"Pacific" 
3,"Mount Hagen",5,"Pacific" 

for line in data.readlines(): 
    splitLine = line.split(",") # Split line on , 
    ID = splitLine[0] 
    name = splitLine[1] 
    no = splitLine[2] 
    ocean = splitLine[4] 

print max(no) 
+1

あなたは行ごとにそれを読んでいるので、 'no'と現在の最大値を比較することで、ループ内の最大値を簡単に見つけることができます – martianwars

+0

あなたのデータはファイルか複数行ですか?最大値のみを探しているのですか、このデータを何らかの方法で扱っていますか? – dawg

答えて

1

データが.txtファイルに保存され、Pythonを使用しているので、あなたはパンダを試してみることができます。

あなたの例のデータを作業用ディレクトリにある「data.txtを」として保存されている場合は、試してみてください。

import pandas as pd 

data = pd.read_table('data.txt', sep=',', header=None) 
data.columns = ['col_' + str(no) for no in range(0, len(data.columns))] # add column names (though not necessarily) 
max_value = max(data['col_2']) 

私はmax_valueはあなたが望むものであると仮定します。

+0

付随するデータを 'max_value'行でどのように取得できますか? –

+1

'data [data.col_2 == max_value]'を使って行全体を取得します。 data [data.col_2 == max_value] .col_0.iloc [0] data [data.col_2 == max_value] .col_1.iloc [0] data [data.col_2 == max_value] .col_3.iloc [0 ] – mikeqfu

1

あなたが行くように最大の構築:

maxno = 0 
for line in data.readlines(): 
    splitLine = line.split(",") # Split line on , 
    ID = splitLine[0] 
    name = splitLine[1] 
    no = splitLine[2] 
    ocean = splitLine[4] 
    if no > maxno: 
     maxno = no 

print maxno 
+1

nb。 'no'は常に0になると仮定します。' maxno'を 'None'に設定すると、負の値で動作します(python3ではなくpython 2)。 – Holloway

+0

あなたが述べたように、いいえもできません。 Maxno = 0/Noneともに働いた。私は分を見つけるためにこれを逆にしたが、0しか返さなかった。これは間違っている。 –

+0

私は視覚的にチェックしただけで、結果は最大ではありません。 –

-2

を、私はあなたが配列内のデータを保存することを示唆しているつもりでした。あなたは、あなたがこのように後にあるものを得ることができます

data = [[1,"Goroka",10,"Pacific"],[2,"Madang",20,"Pacific"],[3,"Mount Hagen,5,"Pacific"]] 

:たとえば

for item in data: 
    maxno = item[2] 

次に、あなたがそれであなたがやりたいことができ

+0

これは元の方法と変わりません – Holloway

0

最大を見つけることmax(data,key=func)キーの機能を使用してください複雑なデータセットからリストのリストにデータがあると仮定します。あなたは、メモリ内の文字列にすることをラインに見えるデータがある場合

test = [[1,"Goroka",10,"Pacific"],[2,"Madang",20,"Pacific"],[3,"Mount Hagen",5,"Pacific"]] 
data = max (test,key=lambda x: x[2]) ## or use min 
print data[2] 
1

>>> print txt 
1,"Goroka",10,"Pacific" 
2,"Madang",20,"Pacific" 
3,"Mount Hagen",5,"Pacific" 

をあなたは、最大または最小値を持つ行を見つけるために、ラムダキー機能をmaxまたはminを使用することができます第三CSVフィールド:

>>> max(txt.splitlines(), key=lambda line:int(line.split(',')[2])) 
'2,"Madang",20,"Pacific"' 

あるいは、分:

>>> min(txt.splitlines(), key=lambda line:int(line.split(',')[2])) 
'3,"Mount Hagen",5,"Pacific"' 

次に、3番目の値を探している場合は、その行を解析します。

まったく同じアプローチを使用して、最大n値または最小のnの値を取得するためにそのようなデータを並べ替えることができます:ライン・バイの一般的なイディオムを使用し、データがファイル内にある場合

>>> print '\n'.join(sorted(txt.splitlines(), key=lambda line:int(line.split(',')[2]))) 
3,"Mount Hagen",5,"Pacific" 
1,"Goroka",10,"Pacific" 
2,"Madang",20,"Pacific" 

を同じアプローチを用いて解析-line:一般に

with open(your_file) as f: 
    max(f, key=lambda line:int(line.split(',')[2])) 

、ファイルのようなデータのためcsv moduleを使用する方がよいです。 forループを使用してファイルの内容を取得する場合は、file.readlines()を使用しないでファイルを反復するのを避ける方がよい場合もあります。

関連する問題