迭代数据并分成不同的类别

时间:2014-02-24 21:40:32

标签: python python-2.7

我遇到了在python中组织数据的问题。基本上我有一个csv数据文件,格式如下:

Direction(Deg), Speed(m/s)
10, 2.8
20, 3.2
45, 5.2
.., ..
.., ..
360, 20

因此我遇到的问题是我试图将数据分类到单独的列表中,例如,方向和速度列表在45和67.5之间,度在2 - 3 m / s。有12个不同的方向范围,增量为22.5度,30个不同的速度范围,增量为1 m / s。

我想我可以把我的主要问题分成两部分: 1.如何在不手动写出超过一百个列表的情况下生成所需列表,是否可以自动执行此操作? 2.我如何遍历数据以将我需要的数字提取到适当的列表中,到目前为止,我一直在尝试在for循环中执行for循环,如下所示:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20]

for number in xrange(0,20,2):
    for value in a:
         if value >= number -2 and value < number:
             print value

但是,我无法想到从问题的第一部分解决创建列表问题的方法。

很抱歉这个可怕的措辞..我仍然很擅长使用p​​ython,因为你可能会说我没有完全理解这个问题!任何指向正确方向的信息都会有用!

1 个答案:

答案 0 :(得分:0)

from collections import defaultdict
import csv

INPUT = "myfile.csv"
ANGLE_SZ = 22.5
SPEED_SZ = 1.

def read_csv(fname, skip_header=False, **kwargs):
    with open(fname, "rb") as inf:
        incsv = csv.reader(inf, **kwargs)
        if skip_header:
            header = next(incsv, None)
        for row in incsv:
            yield row

def main():
    data = defaultdict(lambda: defaultdict(list))
    for d,s in read_csv(INPUT, skip_header=True):
        data[int(d/ANGLE_SZ)][int(s/SPEED_SZ)].append((d,s))

    # data[][] now contains all your data, sorted into buckets

if __name__=="__main__":
    main()