请求建议:EDA中Pandas DataFrame过滤时如何避免重跑代码
解决多次过滤DataFrame后难以回溯的问题
以下是几个实用方案,帮你避免每次出错都要从头跑代码的麻烦:
保留过滤步骤的历史版本
别直接覆盖filtered_df,给每个过滤后的版本加编号或有意义的后缀,比如filtered_df_1、filtered_df_age_over_18。每个版本对应一次过滤操作,这样哪怕某步出错,直接从上一个正确版本继续就行,不用重启整个流程。
示例代码:# 初始过滤 filtered_df_age = df[df['age'] > 18] # 第二次过滤 filtered_df_age_income = filtered_df_age[filtered_df_age['income'] > 50000] # 第三次过滤 filtered_df_final = filtered_df_age_income[filtered_df_age_income['city'] == 'Beijing']用链式过滤或query方法简化流程
Pandas支持链式调用,把多个过滤条件串起来写,既不用堆一堆中间变量,逻辑也清晰。如果用Jupyter这类交互式环境,还能拆成多个单元格分步运行,每一步都能单独检查结果,改起来也方便。
示例代码:# 链式写法 filtered_df = df[df['age'] > 18]\ [df['income'] > 50000]\ [df['city'] == 'Beijing'] # 或者用query更简洁 filtered_df = df.query("age > 18 and income > 50000 and city == 'Beijing'")把中间结果存到文件里
如果处理的是大数据集,每次过滤都耗时间,那就把中间结果存成CSV或Parquet文件。这样哪怕代码崩了或者重启环境,直接加载文件就能继续,不用再从原始数据开始跑。
示例代码:# 保存第一次过滤结果 filtered_df_age.to_parquet('filtered_age_over_18.parquet') # 后续直接加载 filtered_df_age = pd.read_parquet('filtered_age_over_18.parquet')Parquet比CSV更高效,能保留数据类型,加载速度也快,适合大数据场景。
把过滤逻辑封装成函数+用版本控制
把每次过滤写成独立函数,比如按年龄过滤、按收入过滤,调用的时候依次执行。再用Git跟踪代码修改,要是哪步逻辑错了,能直接回退到之前的正确版本,对比差异找问题。
示例代码:def filter_age(df, min_age): return df[df['age'] > min_age] def filter_income(df, min_income): return df[df['income'] > min_income] # 依次调用 temp_df = filter_age(df, 18) filtered_df = filter_income(temp_df, 50000)
内容的提问来源于stack exchange,提问作者user32748264
相关产品推荐
相关产品推荐

