Python DateDiff в Dataframe - PullRequest
       8

Python DateDiff в Dataframe

0 голосов
/ 23 декабря 2018

Я пытаюсь сравнить данный набор данных с заданным пороговым значением.Конечная цель - получить строки в столбце, если он превышает пороговое значение.

Вот код, который я пробовал до сих пор:

#!/usr/bin/python

from datetime import datetime
import sys
import logging
import operator
import pymysql
import pandas as pd

db_endpoint = "awsendpoint"
db_username="user"
db_password="password"
db_name="database_name"
port = 3306

logger = logging.getLogger()
logger.setLevel(logging.INFO)

try:
    conn = pymysql.connect(db_endpoint, user=db_username,
                           passwd=db_password, db=db_name, connect_timeout=5)
except:
    logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
    sys.exit()

logger.info("SUCCESS: Connection to RDS mysql instance succeeded")

cur=conn.cursor()
cur.execute("select talendjobname, taskstartdate from taskexecutionhistory where basicstatus = 'RUNNING'")

#OUTPUT is : 
[('Prod_Adobe_Master_Process_v2', datetime.datetime(2018, 12, 17, 3, 30)), ('Prod_Sales_n_DG_Master_Process_v2', datetime.datetime(2018, 12, 17, 4, 0)), ('SDG_download_mail_attachments', datetime.datetime(2018, 12, 23, 3, 0, 1))]

aws = []
for row in cur:
    aws.append(row)
# All working upto this. 
aws = pd.DataFrame(aws)

aws_time = aws.iloc[:,1]

## I am getting the longer running jobs with respect to current time.
def days_between(d1):
# d1 = datetime.strptime(d1, "%Y-%m-%d")
return abs((datetime.now() - d1))

#Here is the problem
   OUTPUT is a list of : 3Days 11 hours 30 mins,
                         2Days 10 hours 12 mins, 
                         so on and so forth

Мое пороговое значение составляет 8 часов, которые я не могу сравнить с этим результатом.Я хочу получить список рабочих мест, которые только перешли этот порог.

Некоторые дополнительные вещи, которые я пробовал:

time_passed = []
for i in range(0,len(aws_time.index)):
    x = days_between(aws_time[i])

    time_passed.append(x)

Дайте мне знать, что мне не хватает или есть какой-то другой подход.TimeDelta - основной класс, с которым я борюсь.Я пытался работать со строковыми операциями, но также не смог преобразовать вывод как строку.

1 Ответ

0 голосов
/ 23 декабря 2018

datetime.timedelta объекты в Python имеют метод .total_seconds(), который вы можете использовать, чтобы найти часы между двумя раза.

from datetime import datetime, timedelta
t1 = datetime.now()
t2 = datetime.now() - timedelta(hours=10)
type(t1 - t2)

datetime.timedelta

# Find total hours between times
(t1 - t2).total_seconds() / 3600

9.99999

Вы можете векторизовать свои операции, чтобы найти все разницы во времени в часах (используя .dt для доступа к разнице во времени):

# Find the time differences and convert to hours
aws['time_diff'] = aws.iloc[:, 1].apply(days_between) 
aws['time_diff_hours'] = aws['time_diff'].dt.total_seconds() / 3600

И затем установить подмножество длястроки с часами больше 8

greater_than_8_hours = aws[aws['time_diff_hours'] > 8]
...