我有一个Dataset
类,有一些属性,如:
class Dataset():
def __init__(self, name, data, output):
self.name = name
self.data = data
self.output = output
这个data
属性是一个pandas DataFrame,用于存储"data"数据集的。我想知道是否有任何方式,我可以通过Dataset
对象访问它,而不必访问它,以操纵数据。
我的意思是,这是我想做的一个例子。而不是:
my_dataset = Dataset('iris', iris_data, 'outputs/')
duplicates = my_dataset.data[my_dataset.data.duplicated()] # bad
最好是可访问的,比如:
my_dataset = Dataset('iris', iris_data, 'outputs/')
duplicates = my_dataset[my_dataset.duplicated()] # better solution
这意味着Dataset
封装了data
,但使其可以直接访问,而不必每次都显式地使用.data
。
PS:我试图将迭代器行为添加到我的Dataset
类中,以便轻松地通过DataFrame行循环,但我也希望能够使用pandas函数。
您可以使您的自定义类继承自pandas。DataFrame类:
import pandas as pd
class Dataset(pd.DataFrame):
def __init__(self, name, data, output):
super().__init__(data)
self.name = name
self.output = output
然后,例如:
data = {"col1": [1, 1, 3], "col2": [4, 4, 6]}
my_dataset = Dataset("iris", data, "outputs/")
print(my_dataset.name) # iris
print(my_dataset.output) # outputs/
duplicates = my_dataset[my_dataset.duplicated()]
print(duplicates)
# Output
col1 col2
1 1 4