我创建了一个DataFrame,其中包含一个日期时间和一列,表示自从我定义为1900年1月1日00:00之后的'epoch'以来所代表的分钟数。我只对这里的分钟级精度感兴趣。
from pandas.tseries.offsets import *
df = pd.DataFrame([pd.Timestamp('1900-01-01 00:00:00.000000'),
pd.Timestamp('1900-01-01 00:01:00.000000'),
pd.Timestamp('1900-01-01 00:02:00.000000'),],
columns=['datetimeinput'])
这个功能正常,功能
def MinsSince1900(dt):
epoch = pd.Timestamp('1900-01-01 00:00:00.000000')
elapsedmins = (dt - epoch).astype('timedelta64[m]')
return elapsedmins
我可以将列时间键恢复为自纪元以来的0,1,2分钟,其中:
df.loc[:,'timekey']= MinsSince1900(df['datetimeinput'])
但是,当我尝试撤消此过程并将时间键转换回时间时,使用以下函数:
def CreateTimefromKey(t):
x=pd.Timestamp('1900-01-01 00:00:00.000000') + DateOffset(minutes=t)
y = x.to_datetime()
return y
我收到错误消息
TypeError: unsupported type for timedelta minutes component: Series
我显然在做错误,时间戳和系列错误。但我认为如果它以某种方式工作,我可以扭转这个过程。
如果有人能够指出我哪里出错了,我将非常感激,谢谢
答案 0 :(得分:1)
您可以在timedelta64[ns]
(Pandas时间戳)中添加一系列epoch
:
import pandas as pd
df = pd.DataFrame([pd.Timestamp('1900-01-01 00:00:00.000000'),
pd.Timestamp('1900-01-01 00:01:00.000000'),
pd.Timestamp('1900-01-01 00:02:00.000000'),],
columns=['datetimeinput'])
epoch = pd.Timestamp('1900-01-01 00:00:00.000000')
df['timekey'] = (df['datetimeinput'] - epoch) / pd.Timedelta(minutes=1)
df['date'] = pd.to_timedelta(df['timekey'], unit='m') + epoch
产量
datetimeinput timekey date
0 1900-01-01 00:00:00 0 1900-01-01 00:00:00
1 1900-01-01 00:01:00 1 1900-01-01 00:01:00
2 1900-01-01 00:02:00 2 1900-01-01 00:02:00