2017-10-03 5 views
1

J'essaie de trouver le temps moyen qu'il me faut. La valeur 'x' me permettra d'obtenir le temps nécessaire pour chaque ligne, mais comment puis-je trouver le temps moyen pour toutes les lignes. Je vais penser que c'est quelque chose comme x divisé par le nombre, mais je ne suis pas en mesure de trouver une solution à cela ... tous les pros là-bas peuvent m'aider?Python CSV Temps moyen trouvé

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

Veuillez modifier votre question pour inclure des exemples de lignes de votre fichier CSV et la sortie que vous attendez d'elles. –

Répondre

0

deux objets Soustraire datetime crée un objet timedelta. Vous devez conserver un temps total, créez donc un objet timedelta et pour chaque x ajoutez-le à votre total.

A la fin, vous pouvez diviser votre total_time par votre count:

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 

Note: votre logique pour la date_formats implique que les deux dates dans une seule ligne sera toujours partager le même format de date.