Em python, por que não posso herdar pandas.Series de uma forma simples?

votos
1

Eu gostaria de criar uma nova classe que herda de pandas.Series. Eu normalmente não tem qualquer problema ao criar uma classe filha em python, mas estou tendo problemas neste caso.

Aqui está um esquema de herança simples:

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)

que produz:

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

agora vamos experimentá-lo com uma série:

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)

e nós temos:

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

porque é suma série e não uma subsérie?

Publicado 30/01/2013 em 15:44
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Há um problema rastreado sobre este tema no site pandas github:

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

Corri para este problema me enquanto subclasse Series para um formato de dados biblioteca espectral (indexado por comprimento de onda). Foi bem difícil, muita patching macaco e escrever métodos que chamou o método Series explicitamente, mas apenas troquei para minha classe Spectrum antes de retornar. Eu tinha que definir alguma lógica no novo e alguns em inicialização .

Ele, aparentemente, tem a ver com uma mistura de Cython e Python eo numpy C API, bem como uso inconsistente do método _constructor (). Eu não tenho verificado em sobre ele recentemente, no entanto. Eu sei que houve uma mudança de ndarray a uma classe intermediária diferente, NDFrame, como a classe pai trama de dados e Series (ou talvez ele ainda está em processo).

Respondeu 11/12/2013 em 22:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more