获取csv信息,排序并产生numpy数组(python

时间:2018-10-23 06:28:27

标签: python csv numpy

我正在尝试定义一个函数,该函数接受汽车的两个输入,指令和操作,这是字符串列表,其中包含要打开的CSV文件的名称,其中包含数据(我无法使用csv库导入)。 csv文件包含以下格式的列中的数据:动作,时间,速度。例如N,10、10表示以10米每秒的速度向北移动10秒。那么位移将是向北100等。

说第一个instr1.csv文件包含(无标题):

it=iter(range(len(df.columns)))
df=df.rename(columns=lambda x: next(it))

最终,我想返回汽车的垂直和水平位移,然后返回numpy数组中的总距离。我一直努力尝试弄清楚动作何时是北,我将第二列和第三列相乘,将它们相乘,将其附加到列表中,然后创建一个要返回的numpy列表。

首先,我读取数据,遍历每一行以产生数据,然后创建具有dtypes的结构化数组(arrayInstructionsFile1)。

到目前为止,我得到的是:

       0   1   2   3
0  col-a  97  98  99
1  col-b  34  35  36
2  col-c  24  25  26

现在使用这样的功能:

N, 10, 10 
E, 10, 8 
S, 10, 5
W, 10, 4

给出结构化数组:

import numpy as np
#import matplotlib.pyplot as plt #(plot numpy arrays later)


def car(instructions,actions):

    instrucFile = instructions
    newArrayFile1 = []
    newArrayFile2 = []
    lstNorth = []

    for file in instrucFile[0:1]:    #reads first csv file
        with open(file) as filedata: #get data
            arrayInstructionsFile1 = np.genfromtxt(file,delimiter=',',dtype=[('action','U1'),('time',float),('speed',float)],encoding=None,usecols=None)
            for i in arrayInstructionsFile1:      #loops each row to a list
                newArrayFile1.append(i)
            npArrInstrucDataFile1 = np.array(newArrayFile1) #prints structured array

    print('File1 structured array = ',npArrInstrucDataFile1)

但是我很困惑,如何根据动作是N,E,S还是W告诉python将值放入一个新数组,然后将浮点数彼此相乘,这样我就可以返回所需的值numpy数组?

如您所见,我为此付出了很大的努力,因此,非常感谢您提供的任何帮助/指导,甚至提出更好的方法。我已经尽力解释了我为避免混淆所要做的一切,如果时间太长,对不起!

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您的文件就像是一个简单的LOGO程序(https://en.wikipedia.org/wiki/Logo_(programming_language)

您可以按照以下方式“播放”“节目”:

1)定义x和y变量,一开始它们应该为零,这意味着“无位移”

2)确定方向(N,E,S,W)如何应用于XY坐标系,例如,北方向为正Y,南为负Y,东为正X,西为负X

3)对于每个动作,根据您在第2点的决定,检查应执行的操作。

如果操作为“ N”,则应将速度*时间添加到 y 变量中。 (其中速度和时间来自第二列和第三列)

y += speed * time 

如果动作为“ W”,则从“ x”变量中减去速度*时间

x -= speed * time

“ E”和“ S”等

我的意思是说,您应该逐行浏览数据网格,并为每一行执行一个操作。例如:

for row in file1_structured_array:
    action  = row[0]
    speed = float(row[1])
    time = float(row[2])
    if action == "N":
        y += speed * time
    elif action == "S":
        ...
    elif action == "E":
        ...
    elif action == "W":
        ...

4)执行此操作后,您将在 x 变量中具有水平位移,而在 y 变量中具有垂直位移。此外,您可以借助勾股定理找到距离。

5)此结果可以轻松地放入您需要的python或numpy数组中。