sorting多列.csv文件Python

我的数据如下所示:

549 648.077 0.01 552 648.141 0.45 554 647.167 0.1 572 648.141 0.3 530 630.213 0.69 560 670.312 0.70 

文件中有几千行

1st行的取值范围是0-1100

2nd排值范围从600-700

3rd行值范围从0-1我需要绘制数据,因此需要sorting和修改数据:

我需要将第三行的值(正常范围0.0-1.0 )分为0.81-1.00

接下来,我需要将1st行(正常范围( 0-1100 ))的段拆分成0-1100段,最多1100段。我想要做的是find所有2nd行值在0.0-0.200.0-0.200.0-0.2021-30

发现时,我想把它们加在一起,用出现次数除以得到平均值:所以我想要一个在0.0-0.200-10之间的区域。 我相当新的python,我认为这是一种方法:

 import os import csv dataList = [] with open("table.csv") as csv_file: data_reader = csv.reader(csv_file, dialect='excel-tab') for rows in data_reader: if float(rows[2]) <= 0.20: if float(rows[0]) <= 10: print(rows) if 10 <float(rows[0])<=20: print (rows) 

这应该工作(当然没有打印)来获取值,重复比if 20<float(rows[2])<= 30: …..这应该带给我我想要的值,但有一个简单的在10单位的步骤中设置0-1100的范围?

PS:我知道我给了很多信息来解决一个相对较短的问题,那是因为我真的不知道python是否是最好的方法,如果我的方法是合理的? 也许我应该去panda但我刚刚安装。 所以如果有人知道更容易(也许不是编码相关)的方式来解决这样的问题,我真的很感激它。

你需要一个sorting键来把你的数据按正确的顺序排列; 那么你可以通过它循环分组,并得到你的款项。 itertools.groupby非常适合这种types的东西:

 import os import csv from itertools import groupby data_list = [] with open("table.csv") as csv_file: data_reader = csv.reader(csv_file, dialect='excel-tab') for row in data_reader: # read and convert data data_list.append((int(row[0]), float(row[1]), float(row[2]))) def classify(row): # returns classification of row based on third value, then first value # ie [549, 648.077, 0.01] -> (0.0, 540) # [572, 648.141, 0.3] -> (0.3, 570) first, second, third = row for level3 in (0.2, 0.4, 0.6, 0.8): if third <= level3: break else: level3 = 1.0 for level1 in range(10, 1100, 10): if first <= level1: break else: level1 = 1100 return level3, level1 data_list.sort(key=classify) plot_values = [] for key, group in groupby(data_list, classify): group = list(group) number_of_elements = len(group) mean = sum([r[2] for r in group]) / number_of_elements plot_values.append((key, mean)) print('\n'.join(['%-10s -> %s' % (k, m) for k, m in plot_values])) 

针对您提供的样本数据运行时:

 (0.2, 550) -> 0.01 (0.2, 560) -> 0.1 (0.4, 580) -> 0.3 (0.6, 560) -> 0.45 (0.8, 530) -> 0.69 (0.8, 560) -> 0.7