2017-02-16 3 views
1

Ich erhalte Daten aus einer CSV-Datei in Python für ein bestimmtes Datum. Jetzt möchte ich es für eine bestimmte Zeit zum Beispiel von 13.30 bis 14.30 Uhr für ein bestimmtes Datum bekommen. Meine CSV-Datei sieht wie folgt aus:Abrufen von Daten aus CSV für ein bestimmtes Zeitintervall in Python

15 2017/02/07 17:30:45.983 
15 2017/02/07 17:30:51.109 
16 2017/02/07 17:30:56.008 
16 2017/02/07 17:31:01.029 

und meine aktuellen Code ist wie folgt:

import csv 
    from tkinter import * 
    from tkinter.filedialog import askopenfilename 
    from tkinter.messagebox import showwarning, showinfo 
    import datetime 
    import matplotlib.pyplot as plt 





    #csv_file = csv.reader(open("C:\Users\Lala Rushan\Downloads\ARIF Drop Monitoring Final\ARIF Drop Monitoring Final\DataLog.csv")) 
    from Tools.scripts.treesync import raw_input 
    class App(Frame): 
     def __init__(self, master): 
      Frame.__init__(self, master) 


      button1 = Button(self, text="Browse for a file", command=self.askfilename) 
      button2 = Button(self, text="Count the file", command=self.takedate) 
      button3 = Button(self, text="Exit", command=master.destroy) 
      button1.grid() 
      button2.grid() 
      button3.grid() 
      self.userInputFromRaw = Entry(self) 
      self.userInputFromRaw.grid() 

      self.userInputToRaw = Entry(self) 
      self.userInputToRaw.grid() 

      self.grid() 

     def askfilename(self): 
      in_file = askopenfilename() 
      if not in_file.endswith(('.CSV')): 
       showwarning('Are you trying to annoy me?', 'How about giving me a CSV file, genius?') 
      else: 
       self.in_file=in_file 

     def CsvImport(self,csv_file): 


      dist = 0 
      for row in csv_file: 
       _dist = row[0] 
       try: 
        _dist = float(_dist) 
       except ValueError: 
        _dist = 0 

       dist += _dist 
      print ("Urine Volume is: %.2f" % (_dist*0.05)) 


     def takedate(self): 
      from_raw = self.userInputFromRaw.get() 
      from_date = datetime.date(*map(int, from_raw.split('/'))) 
      print ('From date: = ' + str(from_date)) 
      to_raw = self.userInputToRaw.get() 
      to_date = datetime.date(*map(int, to_raw.split('/'))) 
      in_file = ("H:\DataLog.csv") 
      in_file= csv.reader(open(in_file,"r")) 

      for line in in_file: 
       _dist = line[0] 
       try: 
        file_date = datetime.date(*map(int, line[1].split(' ')[1].split('/'))) 
        if from_date <= file_date <= to_date: 
         self.CsvImport(in_file) 

       except IndexError: 
        pass 






    root = Tk() 
    root.title("Urine Measurement") 
    root.geometry("500x500") 
    app = App(root) 
    root.mainloop() 

Wie kann ich die Daten für eine bestimmte Zeit und für ein bestimmtes Datum zu bekommen?

+0

Importieren Sie in einen Pandas DataFrame, erstellen Sie einen Datetime-Index und schneiden Sie den Index dann in den gewünschten Zeitraum. – oliversm

+0

danke für deine antwort. Kannst du mir ein kurzes Beispiel geben? Ich bin neu in Python, also brauchen Sie nur einen Kickstart in diesem. – rushan

+0

Vielleicht möchten Sie auch den von Ihnen bereitgestellten Code in einem minimalen Arbeitsbeispiel überarbeiten. – oliversm

Antwort

1

Verwenden Sie pandas und den Container DataFrame, da dies das ideale Format für die Verarbeitung und Auswahl von Daten darstellt. Siehe nachstehendes Beispiel:

import pandas as pd 
df = pd.read_csv('eg.txt', header=None) # Read in the Data. 
df.index = [pd.datetime.strptime(i, '%Y/%m/%d%H:%M:%S.%f') for i in (df[1] + df[2])] # Format the time into the index 

hier

>>> df 
          0   1    2 3 
2017-02-07 17:30:45.983 15 2017/02/07 17:30:45.983 3.3 
2017-02-07 17:30:51.109 15 2017/02/07 17:30:51.109 4.4 
2017-02-07 17:30:56.008 16 2017/02/07 17:30:56.008 5.2 
2017-02-07 17:31:01.029 16 2017/02/07 17:31:01.029 NaN 

und Sie können einen Zeitbereich wählen Sie verwenden möchten:

>>> df[pd.datetime(2017, 2, 7, 17, 30, 50):pd.datetime(2017, 2, 7, 17, 30, 58)] # Slice the wanted time 
          0   1    2 3 
2017-02-07 17:30:51.109 15 2017/02/07 17:30:51.109 4.4 
2017-02-07 17:30:56.008 16 2017/02/07 17:30:56.008 5.2 

wo die csv, die die Daten erzeugt wird, zB. txt, das aussieht.

15,2017/02/07,17:30:45.983,3.3 
15,2017/02/07,17:30:51.109,4.4 
16,2017/02/07,17:30:56.008,5.2 
16,2017/02/07,17:31:01.029,NaN 

Sie können Spalten und Daten löschen, erstellen und verschieben, wie Sie möchten.

Verwandte Themen