Python OOP中Pandas数据集过滤后reset_filter方法失效求助
问题修复方案
先梳理代码里的核心问题,再给出修复后的完整代码:
核心问题点
- reset_filter无效的根本原因:没有保存原始DataFrame的副本,当前的reset_filter只是复制了已经过滤后的df,自然无法恢复初始状态。
- 方法名不匹配:定义的过滤方法是
filter_out_lanes,但调用时写的是filter_out_column,会直接报错。 - 参数名笔误:
filter_out_lanes里判断的是lanes is None,但参数是column,导致逻辑错误。 - 变量名违规:
class是Python关键字,不能用来当实例变量名;dwell_times变量未定义,应该用创建的实例对象调用方法。
修复后的完整代码
import pandas as pd class Data: def __init__(self, url): self.url = url self.original_df = self.read_csv() # 保存原始数据副本 self.df = self.original_df.copy() # 基于副本做操作,不改动原始数据 def read_csv(self): return pd.read_csv(self.url) def filter_out_lanes(self, column=None): if column is None: return self.df elif isinstance(column, int): column = [column] # 确保'column_id'是你数据中存在的列名 self.df = self.df[~self.df['column_id'].isin(column)] return self.df def reset_filter(self): # 从原始副本恢复数据 self.df = self.original_df.copy() return self.df def main(): # 用合规变量名替代关键字class data_obj = Data('example.csv') data_obj.filter_out_lanes([5, 6]) # 调用正确的方法名 print(data_obj.histogram('column_id')) # 假设你已实现histogram方法 data_obj.reset_filter() # 用实例对象调用重置方法 print(data_obj.histogram('id')) if __name__ == "__main__": main()
额外说明
- 初始化时把原始数据存入
self.original_df,后续所有操作都基于self.df的副本,重置时直接从原始副本复制即可恢复初始状态。 - 之前的
self.df.copy()无效,是因为self.df已经是过滤后的版本,复制它还是过滤后的数据,必须依赖原始副本才能重置。 - 请确认你的
histogram方法已正确实现,确保能正常调用。
内容的提问来源于stack exchange,提问作者Ben Dover
相关产品推荐
相关产品推荐

