2017-10-03 25 views
1

私は平均時間を探しています。値 'x'を使用すると、すべての行にかかる時間を取得できますが、どのようにしてすべての行にかかる平均時間を見つけることができますか。私はそれを数で割ったxのようなものだと思うだろうが、私はこれに対する解決策を見つけることができない。 2つのdatetimeオブジェクトを減算Python CSV平均時間の取得

import datetime,time,csv 
from itertools import islice 
from Tkinter import Tk  #python GUI programming 
from tkFileDialog import askopenfilename 
from collections import Counter 
from datetime import datetime 
import pandas 


Tk().withdraw() 
category_list=[] 
description_list=[] 
reported_date=[] 
acknowledged_date=[] 
count = 0 

# hard code all possible date formats 
date_formats = ['%m/%d/%Y %H:%M', '%-d-%b-%y', '%d/%m/%Y %h:%M %p', '%d/%m/%Y %H:%M', '%A, %d %B %Y %H:%M','%A, %d %B %Y %H:%M','%A %d %B %Y %H%M',"%d/%m/%Y %H:%M %p"," %d/%m/%Y %H:%M %p", '%d-%b-%y' , 
        '%d.%m.%Y', '%d %b %Y %H%M hrs', '%d %b %Y %H%M', '%d-%m-%y', '%d-%b-%y', '%b-%d-%y', '%d-%a-%y','%e-%a-%y','%b %d %Y %H%M hrs','%d/%b/%Y %m:%M %p','%A, %e %B %Y %H:%M',' %d/%m/%Y %h:%M','%d-%b-%y','%m/%d/%Y %H:%M:%S %p'] 
#file = askopenfilename() #ask user which file to open 
#f = open(file,'r') 
with open('Feedback and Complaints_Sample Dataset.csv', 'rb') as f: 
    reader = csv.reader(f) 
    header = next(reader) #read 2nd line onwards 
    data= [] #make a list called data 
    for row in reader: #assign data in every column and name them respectively 


     for format in date_formats: 
     try: 

      reported_on = datetime.strptime(row[0], format) #try and get the dates 
      acknowledged_on = datetime.strptime(row[12], format) #try and get the dates 
      x= acknowledged_on-reported_on #time taken to acknowledge 

      #acknowledged_date.append(acknowledged_on) 
      #reported_date.append(reported_on) 
      count += 1 

      break # if correct format, dont test any other formats 

     except ValueError: 
      pass # if incorrect format, try other formats`enter code here` 
+0

あなたの質問を編集して、CSVファイルのいくつかの例行とそれらに期待する出力を含めてください。 –

答えて

0

timedeltaオブジェクトを作成します。合計時間を確保する必要があるので、timedeltaオブジェクトを作成し、それぞれxを合計して合計します。

終わりに、あなたは、あなたのcountしてtotal_timeを分割することができます。

import csv 
from itertools import islice 
from datetime import datetime, timedelta 


count = 0 
total_time = timedelta() 

# hard code all possible date formats 
date_formats = ['%m/%d/%Y %H:%M', '%-d-%b-%y', '%d/%m/%Y %h:%M %p', '%d/%m/%Y %H:%M', '%A, %d %B %Y %H:%M','%A, %d %B %Y %H:%M','%A %d %B %Y %H%M',"%d/%m/%Y %H:%M %p"," %d/%m/%Y %H:%M %p", '%d-%b-%y' , 
       '%d.%m.%Y', '%d %b %Y %H%M hrs', '%d %b %Y %H%M', '%d-%m-%y', '%d-%b-%y', '%b-%d-%y', '%d-%a-%y','%e-%a-%y','%b %d %Y %H%M hrs','%d/%b/%Y %m:%M %p','%A, %e %B %Y %H:%M',' %d/%m/%Y %h:%M','%d-%b-%y','%m/%d/%Y %H:%M:%S %p'] 

with open('Feedback and Complaints_Sample Dataset.csv', 'rb') as f: 
    reader = csv.reader(f) 
    header = next(reader) #read 2nd line onwards 

    for row in reader: 
     for format in date_formats: 
      try: 
       reported_on = datetime.strptime(row[0], format) #try and get the dates 
       acknowledged_on = datetime.strptime(row[12], format) #try and get the dates 
       x = acknowledged_on - reported_on #time taken to acknowledge 
       total_time += x 
       count += 1 
       break # if correct format, don't test any other formats 

      except ValueError: 
       pass # if incorrect format, try other formats`enter code here` 

print "Total time taken:", total_time     
print "Average time taken:", total_time/count 

注:date_formatsのためのあなたのロジックは、単一の行の両方の日付が常に同じ日付の書式を共有することを意味します。