Python Pandas:向类pandas.core.series.Series添加方法

3 投票
1 回答
2166 浏览
提问于 2025-04-18 07:06

我想在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)

现在我发现ab的类是不一样的;b是一个pandas.core.series.Series对象,所以你不能对它使用append2这个方法。

我希望b能够保留append2这个方法(和a保持同样的类)。这可能吗?有没有其他方法可以在不修改Pandas包源代码的情况下,给Series类添加方法?

1 个回答

8

你可以这样做。其实你根本不需要去创建一个子类,而是可以直接进行一种叫做猴子补丁的操作。这样做比两次添加要更高效,因为添加操作会复制数据。

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

撰写回答