使用__getitem__
方法。它被称为Python的魔术方法,详见http://www.diveintopython3.net/special-method-names.html
class InterpolatedSeries(pd.Series):
def __init__(self, values, forward='nearest', backward='nearest', middle='linear'):
super().__init__(values)
self.forward = forward
self.backward = backward
self.middle = middle
def __getitem__(self, key):
values = super().__getitem__(key)
return values
或者
class InterpolatedSeries(pd.Series):
def __init__(self, values, forward='nearest', backward='nearest', middle='linear'):
super().__init__(values)
self.forward = forward
self.backward = backward
self.middle = middle
def __setitem__(self, key, value):
super().__setitem__(key, value)
另一个选择是创建自己的类,与底层数据结构进行交互。这个类不会继承pd.Series,而是继承一个对象。
class InterpolatedSeries(object):
def __init__(self, values, forward='nearest', backward='nearest', middle='linear'):
self.data = values
self.forward = forward
self.backward = backward
self.middle = middle
def __getitem__(self, key):
values = self.data.__getitem__(key)
return values
def __getattribute__(self, key):
"""Return the stored pandas series item if the method or attribute was not found. This allows your to_csv method to work"""
try:
return super().__getattribute__(key)
except AttributeError:
pass
return self.data.__getattribute__(key)
def __dir__(self):
"""Return the list of attributes. (Most code autocomplete features use this, so this will find your pandas series methods for autocomplete in IDEs). """
values = dir(self.data)
return values + super().__dir__()
以上可能不是最佳方法,但它增加了一些灵活性,通过使访问pandas系列方法更加容易来实现。
i[0]=1
时调用__setitem__
方法,因此在__setitem__
方法中,在设置值之前插入值,或者在设置值之后插入所有值再重置值。当有人请求值variable=i[0]
时,也可以使用'getitem'进行插值。 - justengel