0

0

如何使用 pandas.isin 重置数据集的过滤状态

碧海醫心

碧海醫心

发布时间:2026-01-23 11:10:03

|

573人浏览过

|

来源于php中文网

原创

如何使用 pandas.isin 重置数据集的过滤状态

本文详解如何在面向对象的 pandas 数据处理中正确保存原始数据并实现过滤器重置,避免因链式赋值导致原始数据丢失,并提供可复用的类设计与关键注意事项。

在使用 pandas.isin() 进行条件过滤时,一个常见误区是直接对 self.df 做原地覆盖(如 self.df = self.df[~self.df['col'].isin(vals)]),这会永久丢失原始数据——后续调用 reset_filter() 无法恢复,因为 self.df.copy() 只是对当前已过滤的数据再复制一次,而非还原初始状态。

正确做法是在初始化阶段就独立保存原始数据快照。以下是修复后的完整、健壮的类实现:

import pandas as pd

class Data:
    def __init__(self, url):
        self.url = url
        self.df = self.read_csv()
        self.original_data = self.df.copy()  # ✅ 关键:持久保存原始 DataFrame

    def read_csv(self):
        return pd.read_csv(self.url)

    def filter_out_lanes(self, column=None):
        # 修复原代码中的变量名错误:参数名为 column,但逻辑中误用 lanes
        if column is None:
            return self.df
        if 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_data.copy()  # ✅ 复制原始数据,确保隔离性
        return self.df

    def histogram(self, col):
        """辅助方法:返回指定列的值分布(示例)"""
        return self.df[col].value_counts().to_dict()

使用示例:

塔猫ChatPPT
塔猫ChatPPT

塔猫官网提供AI一键生成 PPT的智能工具,帮助您快速制作出专业的PPT。塔猫ChatPPT让您的PPT制作更加简单高效。

下载
if __name__ == "__main__":
    data = Data('example.csv')  # ✅ 实例化
    data.filter_out_lanes([5, 6])
    print("过滤后 column_id 分布:", data.histogram('column_id'))

    data.reset_filter()  # ✅ 成功重置
    print("重置后 column_id 分布:", data.histogram('column_id'))

⚠️ 关键注意事项

  • 不要依赖 self.df.copy() 重置:它仅复制当前状态,无法回退到初始数据;
  • 避免变量名混淆:原代码中 filter_out_lanes 的参数名为 column,但条件判断却写 if lanes is None,属语法错误;
  • 增强鲁棒性建议:将过滤列名设为可选参数(如 filter_out_lanes(values, col='column_id')),提升复用性;
  • 内存考量:若数据极大,可考虑 self.original_data = pd.read_csv(self.url) 延迟加载,或使用 deep=False(需确认无共享引用风险)。

通过分离「原始数据」与「工作副本」,该设计既符合 OOP 封装原则,又保障了数据操作的可逆性与可测试性。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

54

2025.12.04

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

760

2023.08.22

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

50

2025.11.27

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

56

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

30

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

393

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

116

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 14.1万人学习

Rust 教程
Rust 教程

共28课时 | 4.7万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号