目的:
私はアプリケーションを書いています(Tkinter、Python 3.0 - ubuntuを使用)。イベント トリガーは、ユーザーがフロートを入力し、ユーザーがボタンを押すことです。次に、「計算」関数は、パンダデータフレーム (.csv から作成) の列をユーザーの入力と比較します。
5 つの行が返されます。
これらの行は、関数が pandas を使用して作成したデータフレームの特定の列にあるすべてのフロートと比較したユーザーの番号の近接性 (近さ) によって決定されます。次に、返された 5 つの行から (列の 1 つ) の要約統計を返す必要があります。(注: 今のところ pandas の df.column.describe() で十分です)。
(差し迫った締め切りがあるので、思慮深い提案はすぐに良いカルマと即座の賛成票で満たされます)。:-)
エラー 1:
**TypeError: unsupported operand type(s) for -: 'float' and 'instance'**
注1:
私はそれらがタイプされていないことを知っています-これに関する便利なハックはありますか?
コンパイラは、宣言された es_in=DoubleVar() のデータフレームと「インスタンス」からのフロートを考慮します。
Modification: Tkinter has no 'FloatVar()'. I cast float(es_in). It gives:
エラー 2:
AttributeError: DoubleVar instance has no attribute '__float__'
import pandas as pd
from Tkinter import *
import ttk
def calculate(*args):
try:
df=pd.read_csv('master_pl.csv')
注2:
次の行は、5 つの「最も近い」行を示しています。エラーは次の行から生成されます: ここで、データフレームの列: df["ES"] を es_in というユーザー定義の入力と比較します。
df.ix[(df["ES"][:]-es_in).abs().argsort()[:5]]
except ValueError:
pass
<___calculate_function_ends_here___>
# GUI code continues...
root = Tk()
root.title("Cluster Program")
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
ユーザー定義の入力は次のとおりです。
es_in = DoubleVar()
es_entry = ttk.Entry(mainframe, width=7)
es_entry.grid(column=2, row=1, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)
ttk.Label(mainframe, text="ES").grid(column=3, row=1, sticky=W)
ttk.Label(mainframe, text="output_fiveclosestrows").grid(column=3, row=2, sticky=W)
es_entry.focus()
root.bind('<Return>', calculate)
<end>