仅将CSV中的升序值导入到列表-Python

时间:2019-06-07 21:37:45

标签: python-3.x

我正在尝试仅将CSV文件的一部分导入列表。

简而言之,我接收的CSV包含两列[深度和速度]。深度总是从零开始,然后变大,然后又回到零。

我想将CSV的第一部分添加到列表中(深度0-13 +)。然后,我想将CSV(13-0)的第二部分添加到另一个列表中。

我认为应该使用for循环,但是我不知道如何检查每一行的升/降序号。

pullData = open("svp3.csv","r").read()
dataArray = pullData.split('\n')
depthArrayY = []
speedArrayX = []
depthArrayLength = len(depthArrayY)

for eachLine in dataArray:
    if len(eachLine)>1:
        x,y = eachLine.split(',')
        speedArrayX.append(round(float(x), 2))
        depthArrayY.append(round(float(y), 2))

2 个答案:

答案 0 :(得分:1)

我建议使用Pandas,我认为它可以在需要处理导入数据时为您提供更多服务。

list.groupBy(_("id")).mapValues(_.map(_("value").asInstanceOf[Int]).reduce(_ + _)).toMap

答案 1 :(得分:0)

我假设您的CSV首先包含“深度”列,然后是“速度”列。 深度列的值从0到某个最大值(例如14),然后从13到0深度列-> [0,1,2,3,4,5,6,7,8,9,10,11,12, 13,14,13,12,11,10,9,8,7,6,5,4,3,2,1] 我在速度列中填充了一些随机值。 下面的代码利用pandas库,并使用存储当前最大值以确定列的上升部分何时结束的简单逻辑,将深度列分为2个升序和降序列表。

import pandas as pd

data = pd.read_csv('svp3.csv')

max_val = -10000
depthArrayAscendingY = []
speedArrayX = []
depthArrayDescendingY = []

for a in data.values:
    if a[0]>max_val:
        depthArrayAscendingY.append(a[0])
        speedArrayX.append(a[1])
        max_val = a[0]
    else:
        depthArrayDescendingY.append(a[0])
        speedArrayX.append(a[1])

Baleato对这个问题的答案比这个答案更有效,更干净,您一定要检查他们的答案。