我试图在python中创建一个定制的datetime类,以支持时间序列模型。在回顾了一些现有的python库之后,我发现熊猫DatetimeIndex类提供了我正在寻找的很多功能,但是我仍然想为我的需要添加一些方法。我尝试用自定义的DatetimeIndex init构造函数对类进行子类化,然后调用超级init构造函数,但我似乎无法做到这一点。有人做过这个吗?如果能对如何做到这一点有一些见解,那就太好了。
这是我能想到的最简单的例子。下面是在一个名为time的模块中定义的类:
from pandas import DatetimeIndex
class DatetimeSub(DatetimeInex):
def __init___(initTime):
super().__init__(initTime)当我用以下代码测试控制台中的类时:
import numpy as np
from time import DatetimeSub
testTime = TimeEfo2(np.arange('1985-01-01 12:00','1985-02-01 12:00', dtype="datetime64[D]"))我得到以下错误:
TypeError: object.init()只带一个参数(要初始化的实例)
我不明白这一点,因为您可以用一个DatetimeIndex数组实例化datetime64。此代码运行良好:
from pandas import DatetimeIndex
import numpy as np
dT = DatetimeIndex(np.arange('1985-01-01 12:00','1985-02-01 12:00', dtype="datetime64[D]"))谢谢奎恩!这是可行的。如果我想创建自己的自定义构造函数,如:
from pandas import DatetimeIndex
import numpy as np
class DatetimeSub(DatetimeIndex):
def __init__(self, bgnTime, endTime, unit = 'D'):
# I am now constructing my numpy datetime64 array here:
initTime = np.arange(bgnTime, endTime, dtype="datetime64[{}]".format(unit))
# How do I call the super class to populate with the numpy array? This does not work:
super().__init__(initTime)谢谢!
发布于 2020-05-03 03:40:24
构造函数的第一个参数总是self。因此,如果要将initTime作为第二个参数传入,则需要将其添加到构造函数中,如下所示:
from pandas import DatetimeIndex
import numpy as np
class DatetimeSub(DatetimeIndex):
def __init__(self, initTime):
super().__init__()
dt = DatetimeIndex(np.arange('1985-01-01 12:00','1985-02-01 12:00', dtype="datetime64[D]"))
ds = DatetimeSub(np.arange('1985-01-01 12:00','1985-02-01 12:00', dtype="datetime64[D]"))
print(dt)
print(ds)输出:
DatetimeIndex(['1985-01-01', '1985-01-02', '1985-01-03', '1985-01-04',
'1985-01-05', '1985-01-06', '1985-01-07', '1985-01-08',
'1985-01-09', '1985-01-10', '1985-01-11', '1985-01-12',
'1985-01-13', '1985-01-14', '1985-01-15', '1985-01-16',
'1985-01-17', '1985-01-18', '1985-01-19', '1985-01-20',
'1985-01-21', '1985-01-22', '1985-01-23', '1985-01-24',
'1985-01-25', '1985-01-26', '1985-01-27', '1985-01-28',
'1985-01-29', '1985-01-30', '1985-01-31'],
dtype='datetime64[ns]', freq=None)
DatetimeSub(['1985-01-01', '1985-01-02', '1985-01-03', '1985-01-04',
'1985-01-05', '1985-01-06', '1985-01-07', '1985-01-08',
'1985-01-09', '1985-01-10', '1985-01-11', '1985-01-12',
'1985-01-13', '1985-01-14', '1985-01-15', '1985-01-16',
'1985-01-17', '1985-01-18', '1985-01-19', '1985-01-20',
'1985-01-21', '1985-01-22', '1985-01-23', '1985-01-24',
'1985-01-25', '1985-01-26', '1985-01-27', '1985-01-28',
'1985-01-29', '1985-01-30', '1985-01-31'],
dtype='datetime64[ns]', freq=None)https://stackoverflow.com/questions/61550211
复制相似问题