如何用一段代码为多个DataFrame应用相同的列类别筛选?
批量筛选多个DataFrame的正确方法
你的尝试代码存在两个核心问题:一是引用了未定义的columns变量,二是没有保存筛选后的结果。以下是几种可行的实现方式:
方法1:循环收集筛选结果(直观易懂)
把每个DataFrame筛选后存入新列表,避免修改原数据:
# 原始DataFrame列表 filter_list = [df1, df2, df3, df4] # 初始化空列表存储筛选后的结果 filtered_dfs = [] for df in filter_list: # 筛选category列值为'category1'的行 filtered_df = df[df['category'] == 'category1'] filtered_dfs.append(filtered_df) # 访问筛选后的结果:filtered_dfs[0]对应原df1的筛选结果,以此类推
方法2:列表推导式(简洁高效)
用一行代码完成筛选和结果收集,适合熟悉Python语法的场景:
filter_list = [df1, df2, df3, df4] filtered_dfs = [df[df['category'] == 'category1'] for df in filter_list]
方法3:直接修改原列表(谨慎使用)
如果需要直接覆盖原列表中的DataFrame,可以通过索引循环实现:
filter_list = [df1, df2, df3, df4] for i in range(len(filter_list)): filter_list[i] = filter_list[i][filter_list[i]['category'] == 'category1'] # 此时filter_list中的元素已替换为筛选后的DataFrame
原代码错误说明
name.columns[columns['category'] == 'category1']逻辑错误:你需要筛选的是行,不是列名;且columns变量未定义,正确写法是df['category']来指定目标列。- 循环中直接操作
name不会保留结果:循环变量name是临时引用,生成的筛选结果需要主动收集或替换原列表元素。
内容的提问来源于stack exchange,提问作者user19840753
相关产品推荐
相关产品推荐

