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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Spyder

Spyderとは、Pythonで分析するために作られたIDEです。プログラムの編集・実行・入力補完・デバッグなどの基本的なIDE機能の他、科学用途の計算をするために要するライブラリも装備。公式・サードパーティ製のプラグインもあり、機能を拡張することもできます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

601閲覧

インデックス番号を指定して円グラフを作成したい

riri.hiro

総合スコア1

Spyder

Spyderとは、Pythonで分析するために作られたIDEです。プログラムの編集・実行・入力補完・デバッグなどの基本的なIDE機能の他、科学用途の計算をするために要するライブラリも装備。公式・サードパーティ製のプラグインもあり、機能を拡張することもできます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/05/12 05:08

編集2023/05/12 06:13

実現したいこと

・インデックス番号を指定して円グラフを表示したい

前提

名前,国語,数学,英語,理科,社会
A太,83,89,76,97,76
B介,66,93,75,88,76
C子,100,84,96,82,94
D郎,60,73,63,52,70
E美,92,62,84,80,78
F菜,96,92,94,92,90
↑のCSVデータ(test.csvとします)があります。

このCSVデータからインデックス番号を指定して1人分のデータの円グラフを表示したいです。

まったくの初心者なものでエラー内容を調べてみてもどこをどう対処すれば良いのか全く分からず・・・

どなたかご教授いただけると幸いです。
どうぞよろしくお願いいたします。

エラーメッセージ File "C:\Users\Owner\Desktop\Python\2021_Python入門講座\2021_Python入門講座(6~11教程)\教程11 表データの加工 2\⑤円グラフを表示する\質問 円グラフを表示する\質問.py", line 19, in <module> df.iloc[2].plot.pie() File "C:\Users\Owner\anaconda3\lib\site-packages\pandas\plotting\_core.py", line 1584, in pie return self(kind="pie", **kwargs) File "C:\Users\Owner\anaconda3\lib\site-packages\pandas\plotting\_core.py", line 972, in __call__ return plot_backend.plot(data, kind=kind, **kwargs) File "C:\Users\Owner\anaconda3\lib\site-packages\pandas\plotting\_matplotlib\__init__.py", line 70, in plot plot_obj = PLOT_CLASSES[kind](data, **kwargs) File "C:\Users\Owner\anaconda3\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 1626, in __init__ if (data < 0).any().any(): File "C:\Users\Owner\anaconda3\lib\site-packages\pandas\core\ops\common.py", line 70, in new_method return method(self, other) File "C:\Users\Owner\anaconda3\lib\site-packages\pandas\core\arraylike.py", line 48, in __lt__ return self._cmp_method(other, operator.lt) File "C:\Users\Owner\anaconda3\lib\site-packages\pandas\core\series.py", line 5623, in _cmp_method res_values = ops.comparison_op(lvalues, rvalues, op) File "C:\Users\Owner\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py", line 283, in comparison_op res_values = comp_method_OBJECT_ARRAY(op, lvalues, rvalues) File "C:\Users\Owner\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py", line 73, in comp_method_OBJECT_ARRAY result = libops.scalar_compare(x.ravel(), y, op) File "pandas\_libs\ops.pyx", line 107, in pandas._libs.ops.scalar_compare TypeError: '<' not supported between instances of 'str' and 'int'

エラーメッセージはどこまで必要な情報になるか分からないのですべて書きました。

該当のソースコード

Python Spyder

1import pandas as pd 2import matplotlib.pyplot as plt 3from matplotlib import rcParams 4 5rcParams['font.family'] = 'sans-serif' 6rcParams['font.sans-serif'] = ['Hiragino Maru Gothic Pro', 'Yu Gothic', 'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'Noto Sans CJK JP'] 7 8df = pd.read_csv("test.csv") 9 10 11df.iloc[3].plot.pie() 12plt.legend(loc="lower left") 13plt.show() 14

試したこと

意味があるか分かりませんが、
df = pd.read_csv("test.csv")
print(df)
でインデックスの番号を付けたのを確認して実行してみましたが、変わりませんでした。
名前 国語 数学 英語 理科 社会
0 A太 83 89 76 97 76
1 B介 66 93 75 88 76
2 C子 100 84 96 82 94
3 D郎 60 73 63 52 70
4 E美 92 62 84 80 78
5 F菜 96 92 94 92 90

私の言うインデックス番号とはこの1番左の番号のことです。

補足情報(FW/ツールのバージョンなど)

Spyderを使用しています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2023/05/12 05:22 編集

エラーはエラー発生行等含めて掲載いただくと回答者に分かりやすいです。 > このCSVデータからインデックス番号を指定して1人分のデータの円グラフを表示したいです。 「インデックス番号」とはアルファベットのことを指していますか?
melian

2023/05/12 05:29 編集

「名前」列を含めない様にしてみてください。 df.iloc[3, 1:].plot.pie() もしくは、「名前」列をインデックスにしてもよいかもしれません。 df = pd.read_csv("test.csv", index_col=0) df.iloc[3].plot.pie() それから、単なる書き間違いかと思いますが、plt.legend() で指定している iloc は loc かと思います。 plt.legend(loc="lower left")
riri.hiro

2023/05/12 06:22

melian様 初心者の私に分かりやすく教えていただきありがとうございます! df.iloc[3, 1:].plot.pie()については インデックス3行目の1列目以降を表示しているという解釈で大丈夫ですかね? df = pd.read_csv("test.csv", index_col=0) df.iloc[3].plot.pie() については盲点でした。 2つの例をいただけたことでエラーメッセージの'str' and 'int'の部分の意味がわかりました! ありがとうございます!
melian

2023/05/12 06:27

> df.iloc[3, 1:].plot.pie()については インデックス3行目の1列目以降を表示しているという解釈で大丈夫ですかね? はい、その通りです。print(df.iloc[3,1:]) とすると成績だけが表示されることが判るかと思います。
riri.hiro

2023/05/12 08:26

melian様 ありがとうございます! この2つの例が今の私にとっては最適解かと! 特に df = pd.read_csv("test.csv", index_col=0) df.iloc[3].plot.pie() こちらのほうが個人的にはベストアンサーです! ベストアンサーとしてこの解答で選ばせていただきたいのですが、こちらの回答で投稿していただくことは可能ですか?
melian

2023/05/12 08:30

ありがとうございます、すでに投稿済みです。
guest

回答2

0

ベストアンサー

「名前」列をインデックスとして読み込みます。また、ylabel を非表示にして名前を pie chart の上に表示します。(title=...) それから、pie chart と legend が重ならない様に左へずらします。

python

1import pandas as pd 2import matplotlib.pyplot as plt 3from matplotlib import rcParams 4 5rcParams['font.family'] = 'sans-serif' 6rcParams['font.sans-serif'] = ['Hiragino Maru Gothic Pro', 'Yu Gothic', 'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'Noto Sans CJK JP'] 7 8df = pd.read_csv("test.csv", index_col=0) 9 10nth = 3 11df.iloc[nth].plot.pie(title=df.index[nth], ylabel='') 12plt.legend(bbox_to_anchor=(-0.2, 0), loc="lower left") 13 14plt.show()

イメージ説明

投稿2023/05/12 05:59

編集2023/05/12 06:02
melian

総合スコア19796

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

riri.hiro

2023/05/12 08:49

回答いただきありがとうございました! こちらの回答をベストアンサーにさせていただきました!
guest

0

名前をインデックスにしてやればよいかと思います。

Python

1import pandas as pd 2from io import StringIO 3import matplotlib.pyplot as plt 4from matplotlib import rcParams 5 6rcParams['font.family'] = 'sans-serif' 7rcParams['font.sans-serif'] = ['Hiragino Maru Gothic Pro', 'Yu Gothic', 'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'Noto Sans CJK JP'] 8 9s = """名前,国語,数学,英語,理科,社会 10A太,83,89,76,97,76 11B介,66,93,75,88,76 12C子,100,84,96,82,94 13D郎,60,73,63,52,70 14E美,92,62,84,80,78 15F菜,96,92,94,92,90""" 16df = pd.read_csv(StringIO(s)) 17 18df = df.set_index('名前') 19df.iloc[3].plot.pie() 20plt.legend(loc="lower left") 21plt.show()

イメージ説明

投稿2023/05/12 05:52

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

riri.hiro

2023/05/12 08:48

ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問