2016-05-08 3 views
0

ファイルからデータを読み込み、そのファイルから辞書を作成しようとしています。この辞書では、辞書のキーをXグラフ、辞書の値をマークアップ値としてプロットしたいと考えています。しかし、キー値は文字列であり、ラベルを付けるだけです。私はキー値が文字列であることを示すエラーをスローする次のコードを試しました。Pythonのキーと値のセットに対するプロット

The data from the data.txt file reads as follows: 
new:10,not new:30,10:40,a:5.0 

from matplotlib import pyplot as plt 
import numpy as np 

fileopen=open("data.txt", "r") 
for a in fileopen.readlines(): 
b= a.split(",") 
fileopen.close() 
newdict={} 
for c in b: 
newdict.update({c.rstrip("\',\",").split(":")[0]:eval(c.rstrip("\',\",").split(":")[1])}) 


plt.figure(figsize=(8,6), dpi=80) 
x=[i for i in newdict] 
plt.xticks(np.linspace(0,4,1, endpoint=True)) 
y=[newdict[j] for j in newdict] 
plt.plot(y, color="blue", linewidth=1.0, linestyle="-") 
plt.show() 

これは私のコンソールに表示されるエラーです。

File "C:\Users\Annakoppad\Anaconda2\lib\site-packages\numpy\core\numeric.py", line 474, in asarray 
return array(a, dtype, copy=False, order=order) 

ValueError: could not convert string to float: a 

私はこれ以上進めることができません。

ありがとうございます!!!

答えて

0

csvこれが本当にCSVデータの場合は、試してみてください。 csv.DictReaderがお手伝いできる場合があります。理想的には、キー名は、データによって混合されていませんが、のような行で、最初の行に基づいて位置的に定義されます:あなたはできる、全くCSVでのキーを入れたくない場合は

new,not new,10,a 
10,30,40,5.0 

キー名のシーケンスを定義します。

keys=("new","not new",10,"a") 

は、CSVでの作業(ともreadlines)する場合、各値を文字列として読み込まれるので、行は異なるデータ型が含まれている場合は、個別に変換する必要がありますことを忘れないでくださいintまたはfloatを取得するためのキー。

ref:csv https://docs.python.org/3/library/csv.html?highlight=csv#csv.DictReader

関連する問題