我正在嘗試撰寫一個類,該類將資料幀 ID 作為字串,將值作為資料幀,并創建訪問資料的類屬性。
我能夠撰寫一個類似類的小示例,該類需要以靜態方式創建方法并將物件作為類方法回傳,但我想回圈資料,獲取dfs 的鍵并允許訪問每個df使用屬性。
最小作業示例
from dataclasses import dataclass
import pandas as pd
# re-writing as dataclass
@dataclass
class Dataset:
# data container dictionary as class attribute
dict = {'df1_id':pd.DataFrame({'col1':[1,1]}),
'df2_id':pd.DataFrame({'col2':[2,2]}),
'df3_id':pd.DataFrame({'col3':[3,3]})}
def df1_id(self) -> pd.DataFrame:# class method to create as class attribute
return dict['df1_id']
def df2_id(self) -> pd.DataFrame:# same class method above
return dict['df2_id']
def df3_id(self) -> pd.DataFrame:# same class method above
return dict['df3_id']
def dataframes_as_class_attributes(self):
# store the dfs to access as class attributes
# replacing 3 methods above
return
結果
datasets = Dataset()
print(datasets.df1_id())
預期結果
datasets = Dataset()
print(datasets.df1_id) # class attribute created by looping through the dict object
編輯:
- 與此類似:How to read the contents of a csv file into a class with each csv row as a class instance
uj5u.com熱心網友回復:
你可以setattr像下面這樣使用:
from dataclasses import dataclass
import pandas as pd
@dataclass
class Dataset:
dict_ = {'df1_id':pd.DataFrame({'col1':[1,1]}),
'df2_id':pd.DataFrame({'col2':[2,2]}),
'df3_id':pd.DataFrame({'col3':[3,3]})}
def __post_init__(self):
for key, val in self.dict_.items():
setattr(self, key, val)
為避免與 python 關鍵字發生沖突,請在變數名后放置一個尾隨下劃線。(PEP 8)
uj5u.com熱心網友回復:
獲取
dfs 的鍵并允許訪問每個dfusing 屬性。
似乎該類的唯一目的是具有屬性訪問語法。在這種情況下,只創建一個命名空間物件會更簡單。
from types import SimpleNamespace
class Dataset(SimpleNamespace):
pass
# extend it possibly
data = {
'df1_id':pd.DataFrame({'col1':[1,1]}),
'df2_id':pd.DataFrame({'col2':[2,2]}),
'df3_id':pd.DataFrame({'col3':[3,3]})
}
datasets = Dataset(**data)
輸出:
>>> datasets.df1_id
col1
0 1
1 1
>>> datasets.df2_id
col2
0 2
1 2
>>> datasets.df3_id
col3
0 3
1 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491062.html
