我希望扩展熊猫的DataFrame,创建一个对象,其中所有原始的DataFrame属性/方法都是正确的,同时使一些新的属性/方法可用。我还需要能够将已经DataFrames的对象转换(或复制)到我的新类中。我所做的似乎是可行的,但我觉得我可能违反了一些基本的惯例。这是做这件事的正确方式吗,或者我应该从一开始就这样做吗?
import pandas as pd
class DataFrame(pd.DataFrame):
def __init__(self, df):
df.__class__ = DataFrame # effectively 'cast' Pandas DataFrame as my own
我的想法是,然后我可以直接从Pandas DataFrame初始化它,例如:
df = DataFrame(pd.read_csv(path))
发布于 2018-06-30 03:24:28
如果有必要,我可能会这样做:
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对象
print(type(df)) # <class '__main__.CustomDataFrame'>
print(type(cdf)) # <class '__main__.CustomDataFrame'>
如果你不想这样做,你可以在类方法中复制数据帧。
发布于 2018-06-30 03:24:05
如果你只是想把方法添加到一个DataFrame
中,在你运行其他任何东西之前,就像下面这样。
>>> 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
>>>
发布于 2018-06-30 03:21:40
if __name__ == '__main__':
app = DataFrame()
app()
事件
super(DataFrame,self).__init__()
https://stackoverflow.com/questions/51108063
复制相似问题