質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

pythonのヒストグラム描画エラー「TypeError: Empty 'DataFrame': no numeric data to plot」について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,754

score 19

映画サイトのレビューデータを、pythonで分析したいと思っております。

今、jupyternotebookを使い、pandasのread_csvで以下のようにcsvのデータを取り込んで

data = pd.read_csv("movie_review.csv")


このようなデータフレームとして取り込まれています。
イメージ説明
変数の内容として、

review_rate → 0〜5点のレビュー平均点
review_num → レビューの投稿数
があります。

これを、x軸はreview_rate、y軸はreview_numのヒストグラムを描画したいので以下のように記述しました。

data.plot(x='review_rate', y='review_num', kind='hist', bins=15)

その結果、以下のエラーが返ってきます。
TypeError: Empty 'DataFrame': no numeric data to plot

review_rateが小数点のデータだからだと思うのですが、
小数点のまま描画できるようにはどのようにコードを書けばよいでしょうか?
ご指南頂けると助かります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

x=data["review_rate"],y=data["review_num"]に変更してみたらいかがでしょう?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/30 18:21

    ご提案有難うございます。
    上記に変更してみたところ、エラーの内容が変わりました。

    以下のエラーの内容なのですがいかがでしょうか?
    -----
    KeyError: "None of [Float64Index([ 5.0, 5.0, 5.0, 4.75, 4.72, 4.67, 4.66, 4.64, 4.62, 4.59,\n ...\n 3.26, 3.97, 4.15, 2.51, 4.03, 4.11, 3.48, 3.11, 4.08, 3.56],\n dtype='float64', length=200)] are in the [columns]"
    -----

    キャンセル

  • 2020/01/30 18:25

    あくまで僕の予想ですが、ヒストグラムを描画するのであれば、data["review_num"]もfloat型にする必要があるのかもしれません。

    キャンセル

  • 2020/01/30 18:35

    有難うございます!
    数値の型を修正したら解決しました!

    キャンセル

0

おそらく、review_numなどの値が「文字列」として認識されてしまっていることに対するエラーだと思いますので、

data = data.astype({'review_rate': float, 'review_num': float})


を行ってからプロットすれば問題ないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/30 18:35

    有難うございます。
    上記のコードを実行したところ

    ValueError: could not convert string to float: '4,693'

    というエラーが返ってきました。

    データの中に"4693"という数値があるのですが
    それが"4,693"とカンマ入りで認識されていたようでcsvから数値型に直したら解決しました!
    有難うございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る