2014-10-07 754 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

相关问题