我遇到了在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
但是,我无法想到从问题的第一部分解决创建列表问题的方法。
很抱歉这个可怕的措辞..我仍然很擅长使用python,因为你可能会说我没有完全理解这个问题!任何指向正确方向的信息都会有用!
答案 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()