Shi*_*nai 2 python methods module pandas
因此,我想为自己的项目创建一个模块,并希望使用方法。例如,我想做:
from mymodule import *
df = pd.DataFrame(np.random.randn(4,4))
df.mymethod()
Run Code Online (Sandbox Code Playgroud)
看来我无法使用,.myfunc()因为我认为只能为自己创建的类使用方法。解决方法是制作mymethod一个函数并将其pandas.Dataframes用作变量:
myfunc(df)
Run Code Online (Sandbox Code Playgroud)
我真的不想要这样做,还是有实现第一个的方法吗?
好的解决方案可以在ffn包中找到。作者的工作:
from pandas.core.base import PandasObject
def your_fun(df):
...
PandasObject.your_fun = your_fun
Run Code Online (Sandbox Code Playgroud)
之后,您的手动函数“ your_fun”将成为pandas.DataFrame对象的方法,您可以执行以下操作
df.your_fun()
Run Code Online (Sandbox Code Playgroud)
此方法将能够与DataFrame和Series对象一起使用
如果确实需要向中添加方法,则pandas.DataFrame可以从中继承。就像是:
mymodule:
import pandas as pd
class MyDataFrame(pd.DataFrame):
def mymethod(self):
"""Do my stuff"""
Run Code Online (Sandbox Code Playgroud)
使用mymodule:
from mymodule import *
df = MyDataFrame(np.random.randn(4,4))
df.mymethod()
Run Code Online (Sandbox Code Playgroud)
要保留您的自定义数据框类:
pandas对数据帧执行操作时,通常会返回新的数据帧。因此,要保留数据框类,则需要在对pandas类的实例执行操作时返回类。可以通过提供如下_constructor属性来实现:
class MyDataFrame(pd.DataFrame):
@property
def _constructor(self):
return MyDataFrame
def mymethod(self):
"""Do my stuff"""
Run Code Online (Sandbox Code Playgroud)
测试代码:
class MyDataFrame(pd.DataFrame):
@property
def _constructor(self):
return MyDataFrame
df = MyDataFrame([1])
print(type(df))
df = df.rename(columns={})
print(type(df))
Run Code Online (Sandbox Code Playgroud)
检测结果:
<class '__main__.MyDataFrame'>
<class '__main__.MyDataFrame'>
Run Code Online (Sandbox Code Playgroud)