在csv中查找和绘制数据

时间:2016-10-26 17:58:37

标签: python

我当前的代码会查找此类数据:

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:])))

有没有办法让我在行之间查看并像上面那样拉动整行?

2 个答案:

答案 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个值,则可能会导致索引错误。

鉴于您既没有确定导致问题的数据行,也没有确定错误的代码行,这是我能做的最好的。