2012-06-06 122 views
-3

我有一組數據,看起來像這樣找到最小最大值和一列數據的平均值在python

201206040210 -3461.00000000 -8134.00000000 -4514.00000000 -4394.00000000 0 201206040211 -3580.00000000 -7967.00000000 -4614.00000000 -7876.00000000 0 201206040212 -3031.00000000 -9989.00000000 -9989.00000000 -3419.00000000 0 201206040213 -1199.00000000 -6961.00000000 -3798.00000000 -5822.00000000 0 201206040214 -2940.00000000 -5524.00000000 -5492.00000000 -3394.00000000 0

我想TA在倒數第二列找到最小值,最大值和平均值。 林有點困惑如何使用拆分當列由空間和 - 分隔。 我圖一次,我可以使用min()和max函數。我寫了一個shell腳本來做同樣的事情

#!/bin/ksh 
awk '{print substr($5,2);}' data' > /data1 
sort -n data1 > data2 
tail -1 data2 
head -1 data2 
awk '{sum+=$1} END {print "average = ",sum/NR}' data2 

我只是不知道如何在python中做到這一點。謝謝

編輯:決定使用numpy來做到這一點。

+8

你確定'-'是分隔符而不是負號嗎? –

+1

yep im positive – Rtrader

+2

供將來參考:如果您對某個問題改變了主意,請不要刪除該問題。否則,未來的讀者將不會知道答案所指的是什麼。 – abought

回答

4
with open("filename") as f:  
    cols = [float(row.split("-")[-2]) for row in f.readlines()] 
print min(cols), max(cols), sum(cols)/len(cols) 
+0

你確定cols是列而不是行嗎? – xvatar

+0

的cols只有一列......第二到最後一個 –

+0

+1好得多現在 – Levon

0

該做的:

with open('rows.txt', 'r') as f: 
    col=[float(row.split("-")[-2]) for row in f] 

print 'min: {} max: {} avg: {}'.format(min(col),max(col),sum(col)/float(len(col))) 

輸出:

min: 3798.0 max: 9989.0 avg: 5681.4 

如果你想標準輸入讀取,這樣的:

import sys 

col=[float(row.split("-")[-2]) for row in sys.stdin] 

print 'min: {} max: {} avg: {}'.format(min(col),max(col),sum(col)/float(len(col))) 

將讀取標準輸入的文本做一樣的東西。

相關問題