2016-10-26 5 views
-1

私の現在のコードは、このタイプのデータを探し、CSVのデータをプロットする:検索と

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') 

これは除いて、正常に動作している:ここで

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 

は、私は今それをやっている方法です私はPRAMのデータ部分を解析しようとしています。あなたが見ることができるように、異なる値(CM、DM)を持つ1つ以上のPRAMがあります。私はCMを持っているものだけに興味があります。私はこれを試みたが、それは私に索引エラーを与えた。

if 'CM' == row[2]: 
    CM.append([row[0]] + list(map(float, row[1:]))) 

上記のように行間を見て行全体を引っ張る方法はありますか?

+0

このコードをどこに追加しましたか?あなたが初期化していない変数( 'CM'など)を使用しているようです。 –

+0

AHR2 == 0の場合に追加しました。私はCMを初期化しましたが、ここにコードを収めてここに追加するのを忘れてしまいました。 –

答えて

1

私は実際にこのタイプの仕事にpandasを使用することをお勧めします。それはあなたに頭痛の多くを救います 。あなたのデータは、行ごとに一定の数の列がありません。そのためには、hereが議論されています。

このような何か

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 

を動作するはずその後、フィルタリングは質問がフィルタリングを行うことが多くいるようだので、私はあなたにプロットを残しておきます

(df.loc[:,0] == "PRAM") & (df.loc[:,2] == "CM") 
Out[2]: 
0 False 
1 False 
2 False 
3 False 
4  True 
5 False 
dtype: bool 

df.loc[(df.loc[:,0] == "PRAM") & (df.loc[:,2] == "CM"), :] 
Out[3]: 
     0  1 2 3 4 5 6 
4 PRAM 1231 CM 12 NaN NaN NaN 

のようなもので簡単に行うことができますデータと私は少し正確な最終目標に混乱しています。

0

'PRMA' == row[0]の場合は、CMを確認する必要があります。 2つの値しか持たないPRAM行に対してrow[2]をチェックすると、インデックスエラーが発生する可能性があります。

問題の原因となっているデータ行もコード行もエラーで特定されていないとすれば、それは私ができることです。