所以我有这个应用程序。它记录加速度计的数据。这是数据的格式。它保存在.csv文件中。
time, x, y, z
0.000000,0.064553,-0.046095,0.353776
这是我程序顶部声明的变量。
length = sum(1 for line in open('couchDrop.csv'))
wholeList = [length]
timeList = [length]#holds a list of all the times
xList = [length]
yList = [length]
zList = [length]
我正在尝试创建四个列表;时间,x,y,z。目前,整个数据文件存储在一个列表中。列表中的每一行包含4个表示时间,x,y和z的数字。我需要将wholeList拆分为四个不同的列表。这是发生这种情况的子程序:
def easySplit():
print "easySplit is go "
for i in range (0, length):
current = wholeList[i]
current = current[:-2] #gets rid of a symbol that may be messing tings up
print current
print i
timeList[i], xList[i], yList[i], zList[i] = current.split(',')
print timeList[i]
print xList[i]
print yList[i]
print zList[i]
print ""
这是我得到的错误:
Traceback (most recent call last):
File "/home/william/Desktop/acceleration plotter/main.py", line 105, in <module>
main()
File "/home/william/Desktop/acceleration plotter/main.py", line 28, in main
easySplit()
File "/home/william/Desktop/acceleration plotter/main.py", line 86, in easySplit
timeList[i], xList[i], yList[i], zList[i] = current.split(',')
IndexError: list assignment index out of range`
另一个奇怪的事情是我的点分裂似乎第一次通过循环工作正常。
非常感谢任何帮助。
答案 0 :(得分:0)
对于像这样的数据操作,我建议使用Pandas。在一行中,您可以将CSV中的数据读入Dataframe。
import pandas as pd
df = pd.read_csv("couchDrop.csv")
然后,您可以轻松地按名称选择每列。您可以将数据操作为pd.Series
或操作为np.array
或转换为列表。例如:
x_list = list(df.x)
您可以在http://pandas.pydata.org/pandas-docs/stable/10min.html找到有关大熊猫的更多信息。
编辑:原始代码的错误是xList = [length]
之类的语法不会创建长度为length
的列表。它创建一个长度为一的列表,其中包含一个值为length
的单个int元素。
答案 1 :(得分:0)
代码行wholeList = [length]
不会创建长度= length
的列表。它创建一个只包含一个整数length
元素的列表,所以如果你print(wholeList)
,你只会看到[3]
由于列表在python中是可变的,你可以只对wholeList = []并保持向它添加元素。它不必具有特定的长度。
当你执行从{list}派生的current.split(',')
时,它会尝试仅拆分第一次迭代可用的数据,即[3]