本当にの場合は、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
は定期的に新しいデータフレームを返します。データフレーム上で操作を実行するときしたがって、データフレームクラスを保持するには、クラスのインスタンスに対して操作を実行するときに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))
試験結果:あなたはそれをしたくないのはなぜ
<class '__main__.MyDataFrame'>
<class '__main__.MyDataFrame'>
それは次のように
_constructor
プロパティを提供することによって行うことができます機能?それ以外の場合は、データフレームをサブクラス化またはパッチする必要があります。 – jonrsharpe機能によっては、あなたは 'apply'を使うことができます。たとえば、 'df.apply(myfunc)'これは新しいメソッドを作成しないことを認識していますが、おそらくそれが必要なものを取得します。少なくとも、この方法でメソッドチェーンを実行できます。 '' df.apply(myfunc)。 apply(myotherfunc) '... – johnchase
' apply'メソッドを使うのはどうですか?あなたの方法はどれほど複雑ですか? – blacksite