Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Timeseries GUI:按钮在与数据帧列进行比较时生成类型错误_Python_User Interface_Tkinter_Pandas_Time Series - Fatal编程技术网

Python Timeseries GUI:按钮在与数据帧列进行比较时生成类型错误

Python Timeseries GUI:按钮在与数据帧列进行比较时生成类型错误,python,user-interface,tkinter,pandas,time-series,Python,User Interface,Tkinter,Pandas,Time Series,目标: 我正在编写一个应用程序(使用Tkinter、Python3.0-ubuntu)。事件触发器是用户输入一个浮点,用户按下一个按钮;然后,“计算”函数将pandas数据框(由.csv生成)中的列与用户的输入进行比较 它应该返回五行 这些行是由用户编号与使用pandas创建的函数的数据帧的特定列中的所有浮点值相比的接近度(接近度)确定的。接下来,它应该从返回的5行中返回(其中一列)的摘要统计信息。(注意:pandas的df.column.descripe()现在就足够了) (我有一个紧迫的最后

目标:

我正在编写一个应用程序(使用Tkinter、Python3.0-ubuntu)。事件触发器是用户输入一个浮点,用户按下一个按钮;然后,“计算”函数将pandas数据框(由.csv生成)中的列与用户的输入进行比较

它应该返回五行

这些行是由用户编号与使用pandas创建的函数的数据帧的特定列中的所有浮点值相比的接近度(接近度)确定的。接下来,它应该从返回的5行中返回(其中一列)的摘要统计信息。(注意:pandas的df.column.descripe()现在就足够了)

(我有一个紧迫的最后期限,所以任何深思熟虑的建议都会立即得到报应和立即投票)。:-)

错误1:

   **TypeError: unsupported operand type(s) for -: 'float' and 'instance'**
  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')
注1:

我知道它们被漏打了——这附近有方便的黑客吗?

编译器考虑来自dataframe和'instance'的浮点值,我声明的es_in=DoubleVar()

错误2:

   **TypeError: unsupported operand type(s) for -: 'float' and 'instance'**
  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_的用户定义输入进行比较

        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)
df.ix[(df[“ES”][:]-ES_-in.abs().argsort()[:5]]
除值错误外:
通过
#GUI代码继续。。。
root=Tk()
root.title(“集群程序”)
mainframe=ttk.Frame(根,padding=“3 3 12”)
grid(列=0,行=0,粘性=(N,W,E,S))
mainframe.columnconfigure(0,权重=1)
mainframe.rowconfigure(0,权重=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>
es_in=DoubleVar()
es_entry=ttk.entry(主机,宽度=7)
网格(列=2,行=1,粘性=(W,E))
ttk.按钮(大型机,text=“Calculate”,command=Calculate).grid(列=3,行=3,粘性=W)
ttk.Label(mainframe,text=“ES”).grid(column=3,row=1,sticky=W)
ttk.Label(mainframe,text=“output\u fiveclosestrows”).grid(column=3,row=2,sticky=W)
es_entry.focus()
root.bind(“”,计算)

如果我理解正确,错误是由以下代码位产生的:
df[“ES”][:]-ES_in
,对吗

es_in
是DoubleVar的一个实例,这意味着您不能直接使用该变量的值,因为该值是一个实例而不是一个值——这正是错误消息告诉您的

那么,如何从DoubleVar中获取值呢?使用
get
方法。将代码更改为此,然后查看它是否工作得更好:

df.ix[(df["ES"][:]-es_in.get()).abs().argsort()[:5]]
注意它在.get()中使用的是
es_,而不是
es_

当然,另一个问题似乎是从序列中减去一个浮点值,这毫无意义。是否要从序列中的每个值中减去它

如果您将代码分成多行,这会有所帮助。这将使代码更容易理解,也更容易调试。例如,如果我将您的代码分成多行,我会得到如下结果:

diff = df["ES"][:]-es_in.get()
delta = diff.abs()
sorted = delta.argsort()
index = sorted[:5]
df.ix[index]

这在我看来是错误的,但我不知道numpy或熊猫,所以在这种情况下可能是有意义的。无论如何,将一个复杂语句分解为多个语句是调试不按您的行为方式工作的代码的良好第一步。分解后,您将更好地了解代码的哪一部分失败,并且可以使用调试器或打印语句来显示中间值以验证您的假设

@user1827356有趣。我找了你的钱。运行需要非常长的时间。我没有看到任何错误或(行结果)输出到框中。我应该添加额外的特性,为这个输出分配一个特定的空间吗?es_in是一个tkinter对象,而不是python的“float”。这就是你的错误。处理时间不应与此特定问题相关。您需要将df结果转换为字符串并显示在标签中(假设这是您的目标)。应该很容易找到示例来说明这是如何完成的。@user1827356我不能简单地将其转换为字符串b/c它需要返回df列中与用户编号最接近的5个数字。我是通过差分来实现的——不能对字符串进行差分。我的意思是使结果成为字符串。假设您希望在标签中显示结果,请按如下方式分配您的“已处理结果”-df.ix[(df[“ES”][:]-ES_in.get()).abs().argsort()[:5][“您的列名]。对于_str()@user1827356,我认为无法将序列转换为字符串。Series没有_str()的属性。如果您阅读该链,您会注意到上面已经建议了get()方法,并对其进行了寻址。这句话也没什么错,我在很多内容中都用过。不过,对于阅读本文的其他人和后代来说,您的分类可能会有用。@user1374969:我看不到任何其他答案提到
.get(0)
。有评论,但没有回答。评论是为了澄清,回答是为了回答。您的问题特别是询问为什么会出现错误-:“float”和“instance”***
,并且这个答案解决了这个问题。@user1374969:我不理解您关于行没有问题的评论。使用
x-y
,其中
y
是DoubleVar的一个实例,每次都绝对会给您一个错误。否。重读。我理解这个问题。我的问题是,考虑到这些类型,有没有关于这方面的黑客。(我看到你编辑了你的评论)。尽管你模棱两可的“答案就是答案”——我们似乎仍然没有答案,是吗?匿名用户的第一句话正是您似乎给出的建议。你的回答的其余部分是你告诉我编译一些不是我要求的东西(b/c这行行有效)——如果你