使用for循环遍历列表筛选pandas DataFrame列时仅返回单条数据的问题
问题原因
你出现该问题的核心原因通常是两类操作错误:
- 循环内每次都重新赋值存储结果的变量,覆盖了上一轮循环的输出
- 将结果返回/打印语句写在了循环体内部,导致第一次循环运行完成后就直接终止了流程
解决方案
根据你不同的使用需求,对应实现方式如下:
场景1:需要将所有符合条件的列合并为一个新DataFrame后统一计算
推荐直接用pandas内置的列筛选语法,无需循环,效率更高:
import pandas as pd # 假设你的筛选条件列表为filter_list,原DataFrame为df filter_list = ["列名1", "列名2", "列名3"] # 一步筛选所有符合条件的列 new_df = df[df.columns[df.columns.isin(filter_list)]] # 直接对整合后的新DataFrame做计算,例如求每列均值 calc_result = new_df.mean()
如果你的筛选逻辑比较复杂,必须用循环实现,可以提前初始化容器存储每轮结果,循环结束后再整合:
col_container = [] for item in filter_list: # 筛选当前元素对应的列,加入容器 current_col = df[df.columns[df.columns == item]] col_container.append(current_col) # 所有列筛选完成后合并 new_df = pd.concat(col_container, axis=1) # 后续计算逻辑 calc_result = new_df.mean()
场景2:需要对每个符合条件的列单独计算,保留所有列的计算结果
result_container = {} for item in filter_list: current_col = df[item] # 对当前列做自定义计算,例如求和 current_res = current_col.sum() # 存储当前元素对应的计算结果 result_container[item] = current_res # 最终可将结果转为Series/ DataFrame查看 result_series = pd.Series(result_container)
常见错误写法对照
# 错误示例1:循环内重复赋值结果变量,覆盖上一轮输出 for item in filter_list: new_df = df[item] # 每次循环都重新给new_df赋值,仅保留最后一轮的列 res = new_df.sum() # 错误示例2:返回语句写在循环内,第一次循环就终止 for item in filter_list: new_df = df[item] res = new_df.sum() return res # 第一次循环运行到此处就直接返回结果,不会执行后续循环
内容的提问来源于stack exchange,提问作者Manno
相关产品推荐
相关产品推荐

