客观的:
我正在编写一个应用程序(使用 Tkinter、Python 3.0 - ubuntu)。事件触发是用户输入一个浮点数,用户按下一个按钮;然后 'calculate' 函数将 pandas 数据帧(由 .csv 制成)中的列与用户的输入进行比较。
它应该返回五行。
这些行由用户数字与使用 pandas 创建的函数的数据帧的特定列中的所有浮点数的接近度(接近度)确定。接下来,它应该从这 5 个返回的行中返回(一个 0f 列)的摘要统计信息。(注意: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:
以下行给了我五个“最接近”的行。错误是从这一行生成的:我将数据框的一列: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>