在自己的 class 中使用来自 pandas 的 iloc 和 loc
Using iloc and loc from pandas in own class
我想制作一个自己的 class ExampleClass
,将数据存储在 pandas DataFrame 中。我这样做是为了创建我自己的方法来操作数据。
我的问题是:
是否可以使用 ExampleClass
的对象,例如:
import pandas as pd
class ExampleClass:
def __init__(self, data: pd.DataFrame):
self.data = data
self.other_value = 42
obj = ExampleClass(pd.DataFrame([1,2,3]))
part_of_obj = obj.iloc[:2]
其中 type(part_of_obj) == ExampleClass
和 part_of_obj.data == obj.data.iloc[:2]
?
所以我想要 obj
的副本,但带有 obj.data.iloc[:2]
.
我不想使用 __getitem__
,因为那时我将绑定到 iloc 或 loc,不能同时使用两者。而且我不想创建一个名为 iloc()
的自己的方法,因为我无法使用 []
.
轻松访问它
也许我可以通过继承实现它,但我已经编写了我的 class 并且它使用 DataFrame 来操作数据,这使得更改所写的所有内容变得非常困难。
您可以通过 属性 公开 iloc
然后您还可以添加 loc
以相同的方式对数据框进行子集化。
@property
def iloc(self):
return self.data.iloc
到return一个相同类型的对象也许可以使用一个助手class来包装对__getitem__
的调用:
class ExampleClass:
class Subsetter:
def __init__(self, locator):
self.locator = locator
def __getitem__(self, *vargs, **kwargs):
return ExampleClass(self.locator.__getitem__(*vargs, **kwargs))
def __init__(self, data: pd.DataFrame):
self.data = data
self.other_value = 42
@property
def iloc(self):
return self.Subsetter(self.data.iloc)
obj = ExampleClass(pd.DataFrame([1,2,3]))
part_of_obj = obj.iloc[:2]
我想制作一个自己的 class ExampleClass
,将数据存储在 pandas DataFrame 中。我这样做是为了创建我自己的方法来操作数据。
我的问题是:
是否可以使用 ExampleClass
的对象,例如:
import pandas as pd
class ExampleClass:
def __init__(self, data: pd.DataFrame):
self.data = data
self.other_value = 42
obj = ExampleClass(pd.DataFrame([1,2,3]))
part_of_obj = obj.iloc[:2]
其中 type(part_of_obj) == ExampleClass
和 part_of_obj.data == obj.data.iloc[:2]
?
所以我想要 obj
的副本,但带有 obj.data.iloc[:2]
.
我不想使用 __getitem__
,因为那时我将绑定到 iloc 或 loc,不能同时使用两者。而且我不想创建一个名为 iloc()
的自己的方法,因为我无法使用 []
.
也许我可以通过继承实现它,但我已经编写了我的 class 并且它使用 DataFrame 来操作数据,这使得更改所写的所有内容变得非常困难。
您可以通过 属性 公开 iloc
然后您还可以添加 loc
以相同的方式对数据框进行子集化。
@property
def iloc(self):
return self.data.iloc
到return一个相同类型的对象也许可以使用一个助手class来包装对__getitem__
的调用:
class ExampleClass:
class Subsetter:
def __init__(self, locator):
self.locator = locator
def __getitem__(self, *vargs, **kwargs):
return ExampleClass(self.locator.__getitem__(*vargs, **kwargs))
def __init__(self, data: pd.DataFrame):
self.data = data
self.other_value = 42
@property
def iloc(self):
return self.Subsetter(self.data.iloc)
obj = ExampleClass(pd.DataFrame([1,2,3]))
part_of_obj = obj.iloc[:2]