Попытка рассчитать время, когда была сделана запись в Python, используя текущее время и прошедшее время - PullRequest
0 голосов
/ 17 июня 2020

Я работаю с набором данных, в котором указано количество времени, прошедшее с момента внесения записи в нашу ERP. Он отображается в прошедших секундах (хотя некоторым объектам несколько дней). Я хочу создать новый столбец в своей таблице (в формате MM: DD: YY HH: SS), который показывает дату / время, когда была сделана запись, путем вычитания количества секунд, прошедших с текущего времени. Тип данных для столбца «Время» - «M8 [ns]»

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

import pandas as pd
import time
import datetime

df = pd.read_excel (r'File1.xlsx', sheet_name = 'Sheet1')
df['Time'] = df['Time'].astype('float64')
df['Time'] = pd.to_datetime(df['Time'], unit = 's') 
Date Created = (datetime.now () - df['Time'])
df['Date Created'] = Date Created

Любое понимание будет очень признательно

Обновление: я добился некоторого прогресса

import pandas as pd
import time
from datetime import datetime

df = pd.read_excel (r'File1.xlsx', sheet_name = 'Sheet1')
df['Time'] = pd.to_datetime(df['Time'], unit = 's') 
df['Date Created'] = datetime.now() - df['Time']

Столбец Time теперь хранится как int64. Используя новый код, ['Time'] показывает: 1970-01-01 00: 02: 57 Однако с момента создания прошло только 2:57. Есть некоторые значения, которые были созданы дни go. Я хотел бы иметь возможность вычесть это 2:57 из текущего времени, чтобы найти дату и время, когда была сделана запись.

Спасибо за поддержку.

Обновление 2: Одно из мои инженеры и я смогли выяснить, как определить дату создания записи.

timer = pd.to_timedelta(df['Time'], unit='s')

#timer = pd.to_datetime(timer)
now = pd.to_datetime(datetime.now())

#x = (datetime.now()-datetime(1970,1,1))   #.total_seconds()
#print(timer)
#x = datetime.now()-timer #.total_seconds()
date_created = now-timer
print('Date Created:\n', date_created)

1 Ответ

0 голосов
/ 17 июня 2020

Причина, по которой ['Time'] показывает 1970-01-01 00: 02: 57 , заключается в том, что код Unix начинается с 01.01.1970 00:00 (что эквивалентно нулю) .

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

df_seconds = pd.to_datetime(df['Time'], unit = 's').astype(int)
df['Date Created'] = datetime.fromtimestamp(int(datetime.now().timestamp()) - df_seconds)

В зависимости от того, как работает ваша электронная таблица, вам может потребоваться поиграть с df['Time'].timestamp() немного, но я думаю, что приведенный выше код должен работать.

Надеюсь, это поможет!

...