2017-11-13 6 views
0

私は次のスクリプトがあります:私はどちらかのタイプまたはスクリプトが完璧に動作し、私のヒストグラムを示し、例えば、matplotlibに送信しようとしているデータに何が問題なのですか?

1 4 5 6 3 

をシリーズまたは数字をコピーして貼り付けると

import pandas 
from collections import Counter 
import matplotlib.pyplot as plt 

while True: 
    data = [int(x) for x in raw_input("Enter the list containing the data: ").split()] 
    letter_counts = Counter(data) 
    df = pandas.DataFrame.from_dict(letter_counts, orient="index") 
    df.plot(kind="bar") 
    plt.show() 

を。しかし、出力から数字を貼り付けると、別の端末ウィンドウから取得します。例えば、

13 13 16 16 16 16 9 9 9 9 9 15 15 15 15 20 20 20 20 20 22 22 22 22 13 
    13 13 13 12 12 12 12 12 16 16 16 16 15 15 15 15 15 15 15 15 15 15 15 
    15 15 22 22 22 22 22 15 15 15 15 13 13 13 13 13 18 18 18 18 10 10 10 
    10 12 12 12 12 12 10 10 10 10 20 20 20 20 20 15 15 15 15 15 15 15 15 
    17 17 17 17 17 13 

初めてデータを入力するときは、完全に動作します。しかし、私がそれを入力すると時間は、それは何もしていないし、再度私は入力をヒットする必要があります。それは私にプロットを示していますが、私はそれを閉じると次のエラーが表示されます:

> Enter the list containing the data: Traceback (most recent call last): 
> File "make_histo.py", line 9, in <module> 
>  df.plot(kind="bar") File "/usr/local/lib/python2.7/dist-packages/pandas/plotting/_core.py", 
> line 2627, in __call__ 
>  sort_columns=sort_columns, **kwds) File "/usr/local/lib/python2.7/dist-packages/pandas/plotting/_core.py", 
> line 1869, in plot_frame 
>  **kwds) File "/usr/local/lib/python2.7/dist-packages/pandas/plotting/_core.py", 
> line 1694, in _plot 
>  plot_obj.generate() File "/usr/local/lib/python2.7/dist-packages/pandas/plotting/_core.py", 
> line 243, in generate 
>  self._compute_plot_data() File "/usr/local/lib/python2.7/dist-packages/pandas/plotting/_core.py", 
> line 352, in _compute_plot_data 
>  'plot'.format(numeric_data.__class__.__name__)) 
TypeError: Empty 'DataFrame': no numeric data to plot 

私は間違っていますか?

+0

入力したデータに改行が含まれていますか?質問からそうそうだ。したがって、各行ごとに1つずつ、いくつかのプロットになります。 – ImportanceOfBeingErnest

+0

データが数字であることを確認してください(文字列ではありません) –

+0

それはそうではありません。 'letter_counts'の値を印刷すると、これは私が得るものです: 'データを含むリストを入力してください:13 13 16 16 16 16 9 9 9 9 15 15 15 20 20 20 20 20 22 22 22 22 13 13 13 13 12 12 12 12 12 16 16 16 15 15 15 15 15 15 15 15 15 15 15 22 22 22 22 22 15 15 15 13 13 13 13 13 18 18 18 18 10 10 10 10 12 12 12 ({15:29,13:12,12:10,20:10,22:9,10}(12:10,12:10,15:15,15,17,17: :8,16:8,9:5,17:5,18:4}) 「 –

答えて

1

私はあなたが記述した振る舞いを得られません。あなたの質問から数字のブロックをコピー&ペーストすると、改行が埋め込まれ、raw_input()が複数回呼び出されます。

この問題を回避するには、プログラムで空行を入力の末尾として扱うようにします。次の非常に単純なコードは、自分のシステム上で数字のブロックをOKにコピーします(Windows、Python 2.7 ):

while True: 
    print ("Enter the list containing the data: ") 
    lines = [] 
    while True: 
     line = raw_input() 
     if (line): 
      lines.append(line.lstrip().strip()) 
     else: 
      break 
    data = [] 
    for line in lines: 
     for x in line.split(): 
      data.append(int(x)) 
    print data 

これは役に立ちます。

関連する問題