首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >扩展Python类的正确方法

扩展Python类的正确方法
EN

Stack Overflow用户
提问于 2018-06-30 03:13:02
回答 3查看 257关注 0票数 0

我希望扩展熊猫的DataFrame,创建一个对象,其中所有原始的DataFrame属性/方法都是正确的,同时使一些新的属性/方法可用。我还需要能够将已经DataFrames的对象转换(或复制)到我的新类中。我所做的似乎是可行的,但我觉得我可能违反了一些基本的惯例。这是做这件事的正确方式吗,或者我应该从一开始就这样做吗?

代码语言:javascript
复制
import pandas as pd

class DataFrame(pd.DataFrame):
    def __init__(self, df):
        df.__class__ = DataFrame # effectively 'cast' Pandas DataFrame as my own

我的想法是,然后我可以直接从Pandas DataFrame初始化它,例如:

代码语言:javascript
复制
df = DataFrame(pd.read_csv(path))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-30 03:24:28

如果有必要,我可能会这样做:

代码语言:javascript
复制
import pandas as pd

class CustomDataFrame(pd.DataFrame):
    @classmethod
    def convert_dataframe(cls, df):
        df.__class__ = cls
        return df

    def foo(self):
        return "Works"


df = pd.DataFrame([1,2,3])
print(df)
#print(df.foo())    # Will throw, since .foo() is not defined on pd.DataFrame

cdf = CustomDataFrame.convert_dataframe(df)
print(cdf)
print(cdf.foo())    # "Works"

注意:这将永远更改您传递给convert_dataframe的df对象

代码语言:javascript
复制
print(type(df))     # <class '__main__.CustomDataFrame'>
print(type(cdf))    # <class '__main__.CustomDataFrame'>

如果你不想这样做,你可以在类方法中复制数据帧。

票数 1
EN

Stack Overflow用户

发布于 2018-06-30 03:24:05

如果你只是想把方法添加到一个DataFrame中,在你运行其他任何东西之前,就像下面这样。

代码语言:javascript
复制
>>> import pandas                                
>>> def foo(self, x):                            
...     return x                                 
...                                              
>>> foo                                          
<function foo at 0x00000000009FCC80>             
>>> pandas.DataFrame.foo = foo                   
>>> bar = pandas.DataFrame()                     
>>> bar                                          
Empty DataFrame                                  
Columns: []                                      
Index: []                                        
>>> bar.foo(5)                                   
5                                                
>>>
票数 1
EN

Stack Overflow用户

发布于 2018-06-30 03:21:40

代码语言:javascript
复制
if __name__ == '__main__':
    app = DataFrame()
    app()

事件

代码语言:javascript
复制
super(DataFrame,self).__init__()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51108063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档