我想在 Python 中处理时间序列,因此 Pandas 的 Series 类非常完美,并且有很多有用的方法。
现在我想添加一些我需要但未实现的方法。例如,假设我有兴趣添加一个方法,该方法将两次一值附加到时间序列中,让我们调用该方法append2
:
import pandas
import random
class Testclass(pandas.core.series.Series):
def append2(self, val):
return self.append(val).append(val)
dates = pandas.date_range('1/1/2011', periods=72, freq='H')
data = [random.randint(20, 100) for x in range(len(dates))]
ts = pandas.Series(data, index=dates)
a = Testclass()
b = a.append2(ts[[1]])
print type(a)
print type(b)
现在我发现这个类a
和类b
是不同的;b
is a pandas.core.series.Series
对象,因此您不能应用该方法append2
to it.
我想b
以保护append2
方法(保留相同的类a
)。那可能吗?有没有其他方法可以在不修改 Pandas 包源代码的情况下向 Series 类添加方法?
你可以做这样的事情。您根本不需要子类化,而只需猴子补丁 http://pandas-docs.github.io/pandas-docs-travis/faq.html#adding-features-to-your-pandas-installation。这比追加两次(作为追加副本)更有效。
In [5]: s = Series(np.arange(5))
In [15]: def append2(self, val):
....: if not isinstance(val, Series):
....: val = Series(val)
....: return concat([ self, val, val ])
....:
In [16]: Series.append2 = append2
In [17]: s.append2(3)
Out[17]:
0 0
1 1
2 2
3 3
4 4
0 3
0 3
dtype: int64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)