我当前的代码会查找此类数据:
AHR2,231,123,5,12,51
GPS,12,312,512,35,12
AHR2,13,125,125123,152,12
CMD,123,123,5,123,51,12
PRAM,1231,CM,12
PRAM,12345,DM,14
AND SO ON
以下是我现在正在做的事情:
import csv
import matplotlib.pyplot as plt
AHR2 = []
CM = []
with open('data2.csv', 'r') as csvfile:
content = csv.reader(csvfile, delimiter=',')
for row in content:
if 'AHR2' == row[0]:
AHR2.append([row[0]] + list(map(float, row[1:])))
AHR2 = list(zip(*AHR2))
ax.plot(AHR2[1], AHR2[5], label='AHR2 Alt', color = 'red')
这很好用,除非我试图解析PRAM数据部分。正如你所看到的,有不止一个PRAM具有不同的值(CM,DM),我只对那些有CM的人感兴趣。我试过了,但它给了我一个索引错误。
if 'CM' == row[2]:
CM.append([row[0]] + list(map(float, row[1:])))
有没有办法让我在行之间查看并像上面那样拉动整行?
答案 0 :(得分:1)
我真的建议您使用pandas进行此类工作,它会为您节省开支 很多头痛的事。你的数据有点乱,因为它没有常量 每行的列数,处理此问题的一种方法是here。
这样的事情应该有效
sudo service network restart
然后可以使用
之类的东西轻松完成过滤import pandas as pd
MAX_COLS_PER_ROW = 7
my_cols = range(0, MAX_COLS_PER_ROW)
df = pd.read_csv('test.csv', names=my_cols)
df
Out[1]:
0 1 2 3 4 5 6
0 AHR2 231 123 5 12.0 51.0 NaN
1 GPS 12 312 512 35.0 12.0 NaN
2 AHR2 13 125 125123 152.0 12.0 NaN
3 CMD 123 123 5 123.0 51.0 12.0
4 PRAM 1231 CM 12 NaN NaN NaN
5 PRAM 12345 DM 14 NaN NaN NaN
我会把测绘留给你,因为问题似乎与过滤数据有关,我对确切的最终目标感到有些困惑。
答案 1 :(得分:0)
CM
时,您只需要检查'PRMA' == row[0]
;如果您检查row[2]
非PRAM
行只有2个值,则可能会导致索引错误。
鉴于您既没有确定导致问题的数据行,也没有确定错误的代码行,这是我能做的最好的。