2011-06-22 16 views
1

私は非常にPythonの新人です。私はインポートされたcsvファイルのデータから作成されたリストの欠落したデータを検出しようとしていますので、matplotlibを使ってエラーを出さずにシリーズをプロットすることができます。インポートされたCSVファイルの欠落したデータをPythonで検出してマスクする方法は?

私は私が持っているものをお見せ:

import numpy as np 
# import matplotlib.pyplot as plt 
import csv 
from pylab import * 

res = csv.reader(open('cvs_file_with_data.csv'), delimiter=',') 
res.next() # do not read header 

ColOneData = [] 
ColTwoData = [] 
ColThreeData = [] 

for col in res: 
    ColOneData.append(col[0]) 
    ColTwoData.append(col[1]) 
    ColThreeData.append(col[2]) 

print ColOneData # I got here the following ['1', '2', '3', '4', '5'] 

print ColTwoData # I got here the following ['1', '2', '', '', '5'] 

print ColThreeData # I got here the following ['', '', '3', '4', ''] 

ColTwoData_M = np.ma.masked_where(ColTwoData == '', ColTwoData) # This does not work 

私は空の値をマスクする必要があり、例えば''私はエラーなしでシリーズをプロットすることができます。この問題を解決するための提案はありますか?

よろしく...

答えて

1

マスクとはどういう意味ですか?削除しますか?その場合は、以下を試してみてください。

masked_data = [point for point in data if point != ''] 

編集:

私はnumpyのに慣れていないんだけど、多分これはあなたが探しているものです:場合、

>>> data = numpy.array(['0', '', '1', '', '2']) 
>>> numpy.ma.masked_where(data == '', data) 
masked_array(data = [0 -- 1 -- 2], 
      mask = [False True False True False], 
     fill_value = N/A) 
+0

こんにちは、私は空のデータや欠けているデータをリストから削除するつもりはありません。 matplotlibを使用してプロットするときに対応するマークが空になるように、マスクする必要があります。例えば。 ColOneDataとColTwoDataをプロットしようとすると、今はエラーが発生します。 'plt.plot(ColOneData、ColTwoData)#これにより、エラーが発生します show()' – Jose

+0

@Jose:欠落しているデータが '' 0 ''である場合はどうなりますか?それは正しくプロットですか? –

1

ホセcolumn1をcolumn2にプロットし、空のアイテムでエラーが発生しないようにするには、column2の空のアイテムをcolumn1の対応するアイテムとともに削除する必要があります。以下のような機能が必要です。

def remove_empty(col1, col2): 
    # make copies so our modifications don't clobber the original lists 
    col1 = list(col1) 
    col2 = list(col2) 
    i = 0 
    while i < len(col1): 
     # if either the item in col1 or col2 is empty remove both of them 
     if col1[i] == '' or col2[i] == '': 
      del col1[i] 
      del col2[i] 
     # otherwise, increment the index 
     else: i+=1 
    return col1, col2 
1

何がやりたいことは、あなたがこのような何かを行うことができ、空のノードにフィラー値を追加している場合:それは結果だ場合、あなたはあなたを探して

def defaultIfEmpty(a): 
    if a == '': 
     return '0' 

    return a 

x = ['0', '', '2', '3', ''] 
map (defaultIfEmpty,x) 

result: x = ['0', '0', '2', '3', '0'] 

すると、その後ColTwoDataをmap(defaultIfEmpty,ColOneData)ことができ、など

関連する問題