2017-02-16 7 views
1

Я получаю данные из CSV-файла в python на определенную дату. Теперь я хочу получить его в течение определенного времени, например, с 13:30 до 14:30 на определенную дату. Мой CSV файл выглядеть следующим образом:Получение данных из CSV для определенного интервала времени в 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 

и мой текущий код выглядит так:

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() 

Как я могу получить данные в течение определенного времени и на определенную дату?

+0

Импортируйте в DataFrame Pandas, создайте индекс даты и времени, а затем нарисуйте указатель на любой период времени, который вы хотите. – oliversm

+0

спасибо за ваш ответ. можете ли вы дать мне короткий пример? Я новичок в python, поэтому мне просто нужен кикстарт. – rushan

+0

Кроме того, вы можете пересмотреть код, который вы предоставили, в минимальный рабочий пример. – oliversm

ответ

1

Используйте pandas и его контейнер DataFrame, так как это идеальный формат для обработки данных и выбора его. Смотрите пример ниже:

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 

здесь

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

, и вы можете выбрать диапазон времени, Вы хотите использовать:

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

где CSV, который сгенерировал данные представляет собой, например. txt, который выглядит.

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 

Вы можете удалить, сделать, переместить столбцы и данные по своему усмотрению.