Python 类 : 如何将自定义方法添加到现有对象(pandas 数据框)
Python Classes : How to add a custom method to an existing object (pandas dataframe)
我想构建一个数据查看器,利用 EXCEL,查看 pandas DataFrame
的内容。下面是一个简单的工作示例(作为函数)。但是,我不想将其称为 view(df,10)
,而是将其称为一种方法 df.view(10)
,类似于使用 head
的方式,例如 df.head(10)
.
我是 python classes
的新手。互联网上的所有示例都是定义一个新对象并为该新对象开发类。但是我想我需要在现有的 pandas DataFrame
中添加一个方法。我希望将这个新方法存储在我自己的私有存储库中,然后我可以导入它,例如 from brb import *
,并能够在任意 DataFrame
.
上使用它
这可以吗?
import os
import numpy as np
import pandas as pd
import xlwings as xl
df = pd.DataFrame({
'id': (1,2,3,4,5,6,7,8,9,10)*10,
'year': tuple(np.arange(2011,2021))*10,
'a': np.random.choice(range(2),100),
'b': np.random.choice(range(100),100),
})
def view(df,NObs=None):
book = xl.Book()
book.sheets[0].range("A1").value = df[:NObs]
# What I have:
view(df,10)
# What I want:
df.view(10)
您可以像这样定义自己的 class:
import numpy as np
import pandas as pd
import xlwings as xl
class MyDataFrame:
def __init__(self, data):
self.df = pd.DataFrame(data)
def view(self, NObs=None):
book = xl.Book()
book.sheets[0].range("A1").value = self.df[:NObs]
if __name__ == "__main__":
df = MyDataFrame(
{
"id": (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) * 10,
"year": tuple(np.arange(2011, 2021)) * 10,
"a": np.random.choice(range(2), 100),
"b": np.random.choice(range(100), 100),
}
)
df.view(10)
然后 运行 脚本直接或导入 MyDataFrame
其他地方。
或者您甚至可以将您自己的方法添加到 Pandas 对象并 运行 它“本地”,如下所示:
import numpy as np
import pandas as pd
import xlwings as xl
from pandas.core.base import PandasObject
def view(df, NObs=None):
book = xl.Book()
book.sheets[0].range("A1").value = df[:NObs]
PandasObject.view = view
if __name__ == "__main__":
df = pd.DataFrame(
{
"id": (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) * 10,
"year": tuple(np.arange(2011, 2021)) * 10,
"a": np.random.choice(range(2), 100),
"b": np.random.choice(range(100), 100),
}
)
df.view(10)
我想构建一个数据查看器,利用 EXCEL,查看 pandas DataFrame
的内容。下面是一个简单的工作示例(作为函数)。但是,我不想将其称为 view(df,10)
,而是将其称为一种方法 df.view(10)
,类似于使用 head
的方式,例如 df.head(10)
.
我是 python classes
的新手。互联网上的所有示例都是定义一个新对象并为该新对象开发类。但是我想我需要在现有的 pandas DataFrame
中添加一个方法。我希望将这个新方法存储在我自己的私有存储库中,然后我可以导入它,例如 from brb import *
,并能够在任意 DataFrame
.
这可以吗?
import os
import numpy as np
import pandas as pd
import xlwings as xl
df = pd.DataFrame({
'id': (1,2,3,4,5,6,7,8,9,10)*10,
'year': tuple(np.arange(2011,2021))*10,
'a': np.random.choice(range(2),100),
'b': np.random.choice(range(100),100),
})
def view(df,NObs=None):
book = xl.Book()
book.sheets[0].range("A1").value = df[:NObs]
# What I have:
view(df,10)
# What I want:
df.view(10)
您可以像这样定义自己的 class:
import numpy as np
import pandas as pd
import xlwings as xl
class MyDataFrame:
def __init__(self, data):
self.df = pd.DataFrame(data)
def view(self, NObs=None):
book = xl.Book()
book.sheets[0].range("A1").value = self.df[:NObs]
if __name__ == "__main__":
df = MyDataFrame(
{
"id": (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) * 10,
"year": tuple(np.arange(2011, 2021)) * 10,
"a": np.random.choice(range(2), 100),
"b": np.random.choice(range(100), 100),
}
)
df.view(10)
然后 运行 脚本直接或导入 MyDataFrame
其他地方。
或者您甚至可以将您自己的方法添加到 Pandas 对象并 运行 它“本地”,如下所示:
import numpy as np
import pandas as pd
import xlwings as xl
from pandas.core.base import PandasObject
def view(df, NObs=None):
book = xl.Book()
book.sheets[0].range("A1").value = df[:NObs]
PandasObject.view = view
if __name__ == "__main__":
df = pd.DataFrame(
{
"id": (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) * 10,
"year": tuple(np.arange(2011, 2021)) * 10,
"a": np.random.choice(range(2), 100),
"b": np.random.choice(range(100), 100),
}
)
df.view(10)