我正在尝试仅将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))
答案 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对这个问题的答案比这个答案更有效,更干净,您一定要检查他们的答案。