gpt4 book ai didi

python - 在python中,为什么我不能以简单的方式继承pandas.Series?

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:24 29 4
gpt4 key购买 nike

我想创建一个继承自 pandas.Series 的新类。我通常在 python 中创建子类没有任何问题,但在这种情况下我遇到了问题。

这是一个简单的继承方案:

class Test(object):
def __new__(cls, *args, **kwargs):
print "new Test"
return object.__new__(cls, *args, **kwargs)
def __init__(self):
print "init Test"

class A(Test):
def __new__(cls, *args, **kwargs):
print "new A"
return Test.__new__(cls, *args, **kwargs)
def __init__(self):
print "init A"

print "creating an instance of A"
a = A()
print "type: ", type(a)

输出:

creating an instance of A
new A
new Test
init A
type: <class '__main__.A'>

现在让我们尝试一个系列:

import pandas as pd
class subSeries(pd.Series):
def __new__(cls, *args, **kwargs):
print "new subSeries"
return pd.Series.__new__(cls, *args, **kwargs)

def __init__(self):
print "init subSeries"
print "creating an instance of subSeries"
s = subSeries()
print "type: ", type(s)

我们得到:

creating an instance of subSeries
new subSeries
type: <class 'pandas.core.series.Series'>

为什么是s一个系列而不是一个子系列?

最佳答案

pandas github 网站上有一个关于此主题的问题:

https://github.com/pydata/pandas/issues/60

我自己在为光谱库数据格式(按波长索引)对系列进行子类化时遇到了这个问题。这是相当粗糙的,大量的猴子修补和编写方法显式调用 Series 方法,但只是在返回之前将其交换为我的 Spectrum 类。我必须在 new 中定义一些逻辑,在 init 中定义一些逻辑。

这显然与 Cython 和 Python 以及 numpy C API 的混合以及 _constructor() 方法的使用不一致有关。不过我最近还没有检查过。我知道从 ndarray 到不同的中间类 NDFrame 发生了变化,作为 Dataframe 和 Series 父类(或者可能仍在处理中)。

关于python - 在python中,为什么我不能以简单的方式继承pandas.Series?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14606663/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com