我试图让用户添加三个条目,代码将使用它们从API获取数据,然后将数据导出到CSV。我试图这样做,但我不确定是什么问题,我仍然是Tkinter的新人。
from Tkinter import *
import sys
import csv
from urllib import urlopen
import json
from dateutil.relativedelta import relativedelta
from datetime import datetime
import pandas as pd
root = Tk()
start2 = StringVar()
end2 = StringVar()
root.geometry("1600x800+0+0")
root.title("Data")
startd = "2017-13-03"
endd = "2017-13-03"
power1 =""
ID = "1232.4343.323"
class data1:
def __init__(self,master):
frame = Frame(master)
#frame.pack()
Tops = Frame(root, width=1600, height=1000, bg="powder blue")
Tops.pack(side=TOP)
self.output()
thelabel = Label(Tops, text="Data",font =('arial',30))
thelabel.pack(side=TOP)
def output(self):
Label(text='Start Date:',font=('arial', 12, 'bold')).pack(side=LEFT,padx=12,pady=12)
self.startd = Entry(root, width=10)
self.startd.pack(side=LEFT,padx=2,pady=16)
Label(text='End Date:',font=('arial', 12, 'bold')).pack(side=LEFT,padx=12,pady=12)
self.endd = Entry(root, width=10)
self.endd.pack(side=LEFT,padx=2,pady=16)
Label(text='Device ID:',font=('arial', 12, 'bold')).pack(side=LEFT,padx=12,pady=12)
self.ID = Entry(root, width=10)
self.ID.pack(side=LEFT,padx=2,pady=16)
self.b = Button(root, text='Submit', command=self.getjsondata)
self.b.pack(side=LEFT,padx=20,pady=5)
def getjsondata(self):
global power1
url1 = "https://api.data.com/mongo/measures/"+ID+"/"+startd+"/"+endd+"/?format=json"
power1 = urlopen(url1).read()
power1 = json.loads(power1)
power11 = pd.DataFrame(power1)
power11.csv(power11, file="MyData.csv")
b = data1(root)
root.mainloop()
数据采用json格式,这就是数据的来源:
[{ “时间戳”: “2017-01-14T19:47:00Z”, “值”: “423”},{ “时间戳”: “2017-01-14T19:47:30Z”, “值” : “419”},{ “时间戳”: “2017-01-14T19:48:00Z”, “值”: “431”},{ “时间戳”: “2017-01-14T19:48:30Z”,”值 “:” 429 “},{” 时间戳 “:” 2017-01-14T19:49:00Z”, “值”: “422”},{ “时间戳”: “2017-01-14T19:49:30Z” “值”: “427”},{ “时间戳”: “2017-01-14T19:50:00Z”, “值”: “426”},{ “时间戳”:“2017-01-14T19:50: 30Z “ ”值“: ”427“},{ ”时间戳“: ”2017-01-14T19:51:00Z“, ”值“: ”428“},{ ”时间戳“:” 2017-01-14T19: 51:30Z “ ”值“: ”426“},{ ”时间戳“: ”2017-01-14T19:52:00Z“, ”值“: ”424“},{ ”时间戳“:” 2017-01- 14T19:52:30Z “ ”值“: ”423“},{ ”时间戳“: ”2017-01-14T19:53:00Z“, ”值“: ”453“},{ ”时间戳“:” 2017- 01-14T19:53:30Z “ ”值“: ”433“},{ ”时间戳“: ”2017-01-14T19:54:00Z“, ”值“: ”445“},{ ”时间戳“:” 2017-01-14T19:54:30Z”, “值”: “438”},{ “时间戳”: “2017-01-14T19:55:00Z”, “值”: “430”},{ “时间戳” : “2017-01-14T19:55:30Z”, “值”: “437”},{ “时间戳”: “2017-01-14T19:56:00Z”, “值”: “425”},{”时间戳 “:” 2017-01-14T19 :56:30Z “ ”值“: ”420“},{ ”时间戳“: ”2017-01-14T19:57:00Z“, ”值“: ”431“},{ ”时间戳“:” 2017-01 -14T19:57:30Z “ ”值“: ”435“},{ ”时间戳“: ”2017-01-14T19:58:00Z“, ”值“: ”443“},{ ”时间戳“:” 2017年-01-14T19:58:30Z”, “值”: “430”},{ “时间戳”: “2017-01-14T19:59:00Z”, “值”: “425”},{ “时间戳”: “2017-01-14T19:59:30Z”, “值”: “406”},{ “时间戳”: “2017-01-14T20:00:00Z”, “值”: “412”},{“时间戳“:” 2017-01-14T20:00:30Z”, “值”: “417”},{ “时间戳”: “2017-01-14T20:01:00Z”, “值”: “422”},{ “时间戳”: “2017-01-14T20:01:30Z”, “值”: “422”},{ “时间戳”: “2017-01-14T20:02:00Z”, “值”: “418”} ,{ “时间戳”: “2017-01-14T20:02:30Z”, “值”: “415”},{ “时间戳”: “2017-01-14T20:03:00Z”, “值”:“423 “},{” 时间戳 “:” 2017-01-14T20:03:30Z”, “值”: “411”},{ “时间戳”: “2017-01-14T20:04:00Z”, “值”: “413”}]
我使用panadas过滤了数据,我的主要问题是如何将条目链接到我可以在我的代码中使用的变量。条目是: ID: 开始日期: 截止日期:
请让我知道我的代码中的问题。另一方面,我打算让用户打开如果可能的话,在他的计算机上保存csv文件的位置。
提前致谢
答案 0 :(得分:0)
如果问题出在pandas
方:
您似乎需要read_json
然后如果需要timestamps
选择数据,请使用loc
:
df = pd.read_json(url1).set_index('timestamp')
print (df)
value
timestamp
2017-01-14 19:47:00 423
2017-01-14 19:47:30 419
2017-01-14 19:48:00 431
2017-01-14 19:48:30 429
...
...
date = pd.to_datetime('2017-01-14 19:47:00')
var = df.loc[date, 'value']
print (var)
423