【问题标题】:Trying to calculate the time an entry was made in Python using the current time and time elapsed尝试使用当前时间和经过的时间计算在 Python 中输入的时间
【发布时间】:2020-10-07 10:06:30
【问题描述】:

我正在使用一个数据集,该数据集列出了自在我们的 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。有些值是几天前创建的。我希望能够从当前时间中减去 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)

【问题讨论】:

    标签: python pandas dataframe type-conversion


    【解决方案1】:

    ['Time'] 显示 1970-01-01 00:02:57 的原因是 Unix 代码从 1/1/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(),但我认为上面的代码应该可以工作。

    我希望这会有所帮助!

    【讨论】:

    • 感谢您的回复,里斯。尝试代码时收到以下错误消息:AttributeError: 'Series' object has no attribute 'timestamp'
    • 您是否记得两次都在.timestamp() 末尾加上括号? timestamp() 是一个方法,而不是一个属性。
    • 我做到了。我尝试输入它,然后从您提供的代码中复制并粘贴:df['Date Created'] = datetime.fromtimestamp(int(datetime.now().timestamp()) - int(df['Time'].timestamp())) 我是否在另一个位置缺少括号?
    • 不,您输入正确!也许可以试试这个:df['Date Created'] = datetime.fromtimestamp(int(datetime.now().timestamp()) - int(df['Time'])) 如果可行,我会在上面修改我的答案。
    • 再次感谢里斯。我刚试了一下,出现以下错误:TypeError: cannot convert the series to 我认为转换为整数是正确的方法,我只是想不通如何。我还尝试将纪元时间设置为当前时间并减去“时间”列。我也是这样出错的。
    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 2021-08-16
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多