2014-10-07 165 views
-1

我正在嘗試查找所有可能的速率組合的「Measured_Power」的最小值,最大值和平均值。我有很多費率和頻率(10個費率,10個頻率)。我的CSV文件看起來像:在python中查找csv文件中的最小,最大值

Channel, Rate, Length, Frequency, Expected_Power, Measured_Power, Expected_Eq, Measured_Eq, 
A, 27, 1000, 100, 20, 20.16, <-23.0, -27.33, 
A, 6, 1000, 100, 20, 20.12, <-23.0, -25.96, 
A, 3, 1000, 100, 20, 20.05, <-23.0, -26.34, 
A, 27, 1000, 101, 20, 20.11, <-23.0, -24.88, 
A, 6, 1000, 101, 20, 20.26, <-23.0, -25.55, 
A, 3, 1000, 101, 20, 20.08, <-23.0, -25.42, 
B, 27, 1000, 100, 20, 20.5, <-23.0, -26.98, 
B, 6, 1000, 100, 20, 20.21, <-23.0, -24.61, 
B, 3, 1000, 100, 20, 20.17, <-23.0, -23.54, 
... 

我已經試過:

import numpy 

file = r'C:\data.csv' 
c = numpy.genfromtxt(file,dtype='float',delimiter = ',',skiprows=1, skip_header=0, skip_footer=0, usecols=5,usemask=True) 
print c.max() 
print c.min() 

我能找到的最大和最小,但我如何通過特定通道,速率和頻率排序呢?任何幫助將不勝感激。 預計出於對Measured_Power:

Chanel, Rate, Max, Min, Average, 
A, 3, .., .., .., 
A, 6, .., .., .., 
., ., .., .., .., 
., ., .., .., .., 
., ., .., .., .., 
A, 27,.., .., .., 

B, 3, .., .., .., 
B, 6, .., .., .., 
., ., .., .., .., 
., ., .., .., .., 
., ., .., .., .., 
B, 27,.., .., .., 
+2

這並不明顯,你想要什麼,你有什麼,以及你期望如何達到你的目標。請**舉例輸入和輸出**需要和*解釋*你一直在試圖做到這一點。 – Veedrac 2014-10-07 13:59:32

+1

你是否喜歡'numpy'?這聽起來更像是一個['pandas'](http://pandas.pydata.org)問題。 – DSM 2014-10-07 14:09:56

+0

我正在尋找簡單的解決方案(numpy,熊貓等..) – dmaster 2014-10-07 14:15:08

回答

1

我希望我明白你想要得到的東西。你想得到最小,最大和平均值Measured_Power爲每個可能的組合RateFrequency,對吧?

好了,你可以用大熊貓做到這一點相當快:

import pandas as pd 

data = pd.read_csv('data_file.csv') 
grouped_measured_power = data.groupby([' Rate', ' Frequency'])[' Measured_Power'] 
min_measured_power_by_rate_and_freq = grouped_measured_power.min() 
max_measured_power_by_rate_and_freq = grouped_measured_power.max() 
average_measured_power_by_rate_and_freq = grouped_measured_power.mean() 

就是這樣!請注意,因爲CSV文件中有空格,所以我在列名之前放了一個空格,但您可能更願意更好地格式化數據文件。

對於這裏的記錄是你的榜樣

> min_measured_power_by_rate_and_freq 
Rate Frequency 
3  100   20.05 
     101   20.08 
6  100   20.12 
     101   20.26 
27  100   20.16 
     101   20.11 
Name: Measured_Power, dtype: float64 

> max_measured_power_by_rate_and_freq 
Rate Frequency 
3  100   20.05 
     101   20.08 
6  100   20.21 
     101   20.26 
27  100   20.50 
     101   20.11 
Name: Measured_Power, dtype: float64 

> average_measured_power_by_rate_and_freq 
Rate Frequency 
3  100   20.050 
     101   20.080 
6  100   20.165 
     101   20.260 
27  100   20.330 
     101   20.110 
Name: Measured_Power, dtype: float64 

結果的輸出是一個多索引結構......你可能想unstack it,太。

編輯:

只記得,你實際上可以做到即使立即提出申請的幾個聚集功能更好,所以你可以這樣做:

import pandas as pd 
import numpy as np 

data = pd.read_csv('data_file.csv') 
grouped_measured_power = data.groupby([' Rate', ' Frequency'])[' Measured_Power'] 
result = grouped_measured_power.aggregate({'min': np.min, 
              'max': np.max, 
              'average': np.mean}) 

你將直接獲得一切融合在一起:

> result 
        average max min 
Rate Frequency      
3  100   20.050 20.05 20.05 
     101   20.080 20.08 20.08 
6  100   20.165 20.21 20.12 
     101   20.260 20.26 20.26 
27 100   20.330 20.50 20.16 
     101   20.110 20.11 20.11 
+0

感謝您的評論和所有帖子。我嘗試了你的解決方案,但是我在熊貓的舊版本numpy,編譯和安裝環境中遇到了技術問題。可以使用csv閱讀器嗎? – dmaster 2014-10-08 08:04:12

+0

它*應該可以*使用'csv.reader'來創建數據框架,但看起來像是一個不必要的混亂......你有什麼樣的問題?你應該可以安裝numpy和pandas而沒有太多問題(你的操作系統是什麼?),無論如何你需要它來進行組和聚合步驟。 – jdehesa 2014-10-08 10:30:49

+0

我用大熊貓解決了我的問題。卸載舊版本的numpy並安裝新版本解決了它。 javidcf,你的解決方案適合我!謝謝!! – dmaster 2014-10-13 06:55:14