我想創建一個自己的類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(),因為我無法使用[].
也許我可以通過繼承來實作它,但是我已經撰寫了我的類并且它使用 DataFrame 來操作資料,這使得更改撰寫的所有內容變得非常困難。
uj5u.com熱心網友回復:
您可以iloc通過屬性公開,然后您還可以添加loc相同的方式來對資料幀進行子集化。
@property
def iloc(self):
return self.data.iloc
要回傳相同型別的物件,可能可以使用一個輔助類來包裝對 的呼叫__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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314625.html
上一篇:克服Rust中缺乏繼承的問題
