如何在Tkinter python2.7中将数据帧导出为CSV?

时间:2017-04-13 06:17:49

标签: python json pandas dataframe tkinter

我试图让用户添加三个条目,代码将使用它们从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文件的位置。

提前致谢

1 个答案:

答案 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