如何打印类中self.dataframe变量?类内外调用报错求解
问题解决方法
一、类外部打印dataframe的正确方式
self是类方法内部用来指代当前实例的专属变量,类外部不存在这个名称,直接调用会触发NameError。正确做法是先创建类的实例,再通过实例对象访问dataframe属性:
# 先实例化CustomDataSet(替换成你实际的参数值) dataset = CustomDataSet( csv_file="your_data.csv", root_dir="your_root_directory", transform=your_transform_object # 比如torchvision.transforms.Compose([...]) ) # 通过实例访问并打印dataframe print(dataset.dataframe) # 也可以只打印前几行避免输出过多 print(dataset.dataframe.head())
二、类内部打印dataframe的正确方式
如果之前在类内部打印未成功,大概率是打印语句的位置不对,需要把打印逻辑放在类的方法内部(比如__init__或__getitem__):
方式1:在初始化时打印完整/部分数据
修改__init__方法,读取完CSV后直接打印:
def __init__(self, csv_file, root_dir, transform): self.root_dir = root_dir self.transform = transform self.dataframe = pd.read_csv(csv_file, low_memory=False) # 打印前5行数据 print("初始化完成,dataframe前5行:") print(self.dataframe.head())
方式2:在获取元素时打印对应行数据
修改__getitem__方法,打印当前索引对应的行:
def __getitem__(self, idx): if torch.is_tensor(idx): idx = idx.tolist() # 打印当前索引的行数据 print(f"索引{idx}对应的行数据:") print(self.dataframe.iloc[idx]) img_path = self.dataframe.iloc[idx, 15] image = Image.open(img_path).convert("RGB") tensor_image = self.transform(image) return tensor_image
核心要点
- 类外部:必须通过实例对象访问类的属性,不能直接用
self - 类内部:只有在类的方法中,才能用
self指代当前实例,进而访问dataframe
内容的提问来源于stack exchange,提问作者Murad Ali
相关产品推荐
相关产品推荐

