2017-02-01 3 views
0

私はデータからヒストグラムを生成するために.cvsファイルを使用してきました。 「102.919,103.36」を を:float型に文字列を変換できませんでした:それはここで私はこのコードを実行する .csvファイルを使用してフロートしてヒストグラムを生成する文字列を覆う

# histplot.py 
     import numpy as np 
     import matplotlib.pyplot as plt 
     import csv 

     with open('datafile.csv', 'rU') as data: 
      reader = csv.DictReader(data, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC) 
      for line in reader: 
       t = float(line) 
       data.append(t) 
      reader.close() 

# generate the histogram 
     hist, bin_edges=np.histogram(data, bins=50, range=[80,135]) 


# generate histogram figure 
     plt.hist(data, bin_edges) 
     plt.savefig('chart_file', format="pdf") 
     plt.show() 

を書かれているコードは私にエラー とValueErrorを与えるのです。この

102.919 103.36 
    102.602 103.05 
    104.106 104.57 
    108.791 109.26 
    104.045 104.52 
    104.324 104.77 
    105.106 105.57 
    102.619 103.08 
    102.124 102.6 

のようなデータの何かを持っています誰かがcsvファイルを使用して文字列を浮動小数点に変換することに関するいくつかのアイデアを教えてくれますか? ありがとうございます。

答えて

0

最初にwith open('datafile.csv', 'rU') as data:は、dataをファイルのファイルハンドルとして取得することを意味します。このファイルハンドルは繰り返し可能ですが、何も追加することはできません。

第2 csv.DictReaderは、辞書としてのデータへのアクセスを提供します。ここではcsv.readerを使用することをお勧めします。この場合、データにはlistという名前でアクセスできます。

第3に、line全体を、辞書でもリストでもフロートに変換することはできません。リストの1つの要素でのみ行うことができます。 (これはエラーの原因です)。フロートへの変換は、読者がすでに処理しているので、必要でもありません。

これで、最初に空のリストに要素を1行ずつ追加し、このリストをヒストグラム関数に渡すことができます。

import numpy as np 
import matplotlib.pyplot as plt 
import csv 

data = [] #create empty list 
with open('datafile.csv', 'rU') as f: 
    reader = csv.reader(f, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC) 
    for line in reader: 
     data.extend(line) 

# generate the histogram 
hist, bin_edges=np.histogram(data, bins=50, range=[80,135]) 


# generate histogram figure 
plt.hist(data, bin_edges) 
#plt.savefig('chart_file', format="pdf") 
plt.show() 

私はちょうど全体のデータの読み出しがnumpy.loadtxtを使用して、はるかに簡単な方法で行うことができることに言及してみましょう。
さらに、データ処理を行う必要がない場合は、ヒストグラムのプロットを簡略化することができます。

import numpy as np 
import matplotlib.pyplot as plt 

data = np.loadtxt('datafile.csv').flatten() 

plt.hist(data, bins=50, range=[80,135]) 

plt.show() 
+0

変更を提案した後も以前と同じエラーが表示されます。 –

+0

最初にエラーが発生した行( 'float(line)')が変更されたスクリプトに存在しないので、私はそれを非常に疑っています。エラーについて報告する場合は、常にエラーをスローする行を含めます。 – ImportanceOfBeingErnest

+0

トレースバック(直近の最後のコール): ファイル "C:¥Users¥JINAY¥App¥Local¥Programs¥Python¥Python35¥testfile.py"ファイル(行10) リーダーの場合: ValueError:できませんでした文字列を浮動小数点に変換する: '102.919,103.36' これが返されるこのエラーは返されます –

関連する問題