如何使一个类实例属性是一个熊猫数据框架直接访问?



我有一个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

最新更新