前提・実現したいこと
下記のようなエラーを直し、チェックボックスで受け取った値によって、表示されるヒストグラムの内容を変え、好きなデータ毎に比較できるようにしたいです。
発生している問題・エラーメッセージ
Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\myname\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__ return self.func(*args) File "c:\Users\myname\Documents\sample\sample_hist.py", line 35, in show dt1 = fdn + df['第1回'] File "C:\Users\myname\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\ops\common.py", line 69, in new_method return method(self, other) File "C:\Users\myname\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\arraylike.py", line 96, in __radd__ return self._arith_method(other, roperator.radd) File "C:\Users\myname\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\series.py", line 5526, in _arith_method result = ops.arithmetic_op(lvalues, rvalues, op) File "C:\Users\myname\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\ops\array_ops.py", line 224, in arithmetic_op res_values = _na_arithmetic_op(left, right, op) File "C:\Users\myname\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\ops\array_ops.py", line 166, in _na_arithmetic_op result = func(left, right) File "C:\Users\myname\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\roperator.py", line 9, in radd return right + left numpy.core._exceptions._UFuncNoLoopError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U1'), dtype('int64')) -> None
該当のソースコード
python
1import tkinter as tk 2import pandas as pd 3from tkinter import * 4import matplotlib.pyplot as plt 5from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 6 7root = tk.Tk() 8 9df = pd.read_excel('sample.xlsx') 10 11histframe = tk.LabelFrame(root, text='ヒストグラムの表示', bg='#ffffff') 12histframe.pack() 13 14var1 = tk.IntVar()# 文字の場合 'tk.StringVar' 数字の場合 'tk.IntVar' 15var2 = tk.IntVar() 16var3 = tk.IntVar() 17 18df.drop(0) 19x1 = df['第1回'] 20x2 = df['第2回'] 21x3 = df['第3回'] 22 23 24def show(): 25 root2 = tk.Tk() 26 root2.title('ヒストグラム') 27 28 zt1 = var1.get() 29 zt2 = var2.get() 30 zt3 = var3.get() 31 32 fdn = '' 33 34 if zt1 == 1: 35 dt1 = fdn + ', ' + df['第1回'] 36 else: 37 dt1 = fdn + '' 38 39 if zt2 == 2: 40 dt2 = fdn + ', ' + df['第2回'] 41 else: 42 dt2 = fdn + '' 43 44 if zt3 == 3: 45 dt3 = fdn + ', ' + df['第3回'] 46 else: 47 dt3 = fdn + '' 48 49 result = dt1 + dt2 + dt3 50 result2 = result.replace(', ', '', 1) 51 result3 = '[' + result2 + ']' 52 53 fig = plt.Figure(figsize=[5, 5]) 54 ax = fig.add_subplot(1, 1, 1) 55 ax.hist(result3, bins=10) 56 57 canvas = FigureCanvasTkAgg(fig, master=root2) 58 canvas.get_tk_widget().pack() 59 60CBox1 = tk.Checkbutton(histframe, text='第1回', variable=var1, onvalue= 1, offvalue= '') 61CBox1.deselect() 62CBox1.pack() 63 64CBox2 = tk.Checkbutton(histframe, text='第2回', variable=var2, onvalue= 2, offvalue= '') 65CBox2.deselect() 66CBox2.pack() 67 68CBox3 = tk.Checkbutton(histframe, text='第3回', variable=var3, onvalue= 3, offvalue= '') 69CBox3.deselect() 70CBox3.pack() 71 72#決定ボタンを表示 73myButton = tk.Button(root, text='決定', command=show) 74myButton.pack() 75 76root.mainloop()
sample.xlsxの中身
出席番号 名前 第1回 第2回 第3回 1 浅井 49 50 53 2 朝倉 70 72 71 3 明智 93 91 92 4 尼子 41 40 40 5 石田 79 76 82 6 今川 59 60 57 7 池田 76 73 78 8 上杉 62 61 60 9 大谷 49 50 51 10 大友 65 62 67 11 織田 82 80 78 12 小山田 43 46 41 13 片倉 50 53 49 14 吉川 59 60 61 15 黒田 67 66 69 16 顕如 53 54 51 17 小早川 81 81 83 18 佐竹 37 36 35 19 真田 78 79 80 20 柴田 34 33 31 21 島津 65 69 70 22 武田 46 42 43 23 竹中 39 40 43 24 長宗我部 43 42 40 25 伊達 47 46 45 26 徳川 26 29 30 27 豊臣 64 62 63 28 直江 59 60 62 29 丹羽 67 66 66 30 本多 54 55 53 31 北条 54 54 59 32 前田 48 50 46 33 松永 65 64 68 34 最上 72 71 70
試したこと
調べたところ、データベースから文字列を受け取っていると出るエラーのようなので、drop関数で最初の列を消してみたのですが、上手くいきませんでした。
補足情報(FW/ツールのバージョンなど)
windows10, python3.9.9
回答1件
あなたの回答
tips
プレビュー