如果你真的需要添加一個方法到pandas.DataFrame
你可以繼承它。喜歡的東西:
MyModule的:
import pandas as pd
class MyDataFrame(pd.DataFrame):
def mymethod(self):
"""Do my stuff"""
使用MyModule的:
from mymodule import *
df = MyDataFrame(np.random.randn(4,4))
df.mymethod()
要保留您的自定義數據框類:
pandas
經常返回新dataframes在數據幀上執行操作時。所以爲了保留你的數據框類,你需要在你的類的一個實例上執行操作時返回你的類pandas
。
class MyDataFrame(pd.DataFrame):
@property
def _constructor(self):
return MyDataFrame
def mymethod(self):
"""Do my stuff"""
測試代碼:
class MyDataFrame(pd.DataFrame):
@property
def _constructor(self):
return MyDataFrame
df = MyDataFrame([1])
print(type(df))
df = df.rename(columns={})
print(type(df))
測試結果:這可以通過提供一個_constructor
性質等進行
<class '__main__.MyDataFrame'>
<class '__main__.MyDataFrame'>
你爲什麼不希望把它一個函數?否則,你將不得不繼承或修補數據幀。 – jonrsharpe
根據函數的作用,你可以使用'apply'。例如'df.apply(myfunc)'我意識到這不會創建一個新的方法,但也許它會得到你所需要的東西,至少你可以通過這種方式進行方法鏈接''''df.apply(myfunc)。 apply(myotherfunc)'... – johnchase
剛剛使用'apply'方法怎麼樣?你的方法有多複雜? – blacksite