使用for循环筛选DataFrame列时仅保留最后一列的问题排查
问题解决:DataFrame循环选列仅保留最后一列的问题
问题原因
你的循环代码存在逻辑错误:每次迭代都重新将df1赋值为df[["col1", "col2"]],相当于每次循环都回到初始状态,只加入当前遍历的列,之前添加的列会被完全覆盖,最终自然只剩最后一次循环处理的列。
解决方案
方法一:直接批量选取(推荐,高效简洁)
不需要写循环,直接把固定列和筛选列的列表合并,一次性从原DataFrame中选取所有需要的列:
# 假设你的筛选列列表名为selected_cols selected_cols = ["筛选列1", "筛选列2", ...] # 你的200列列表 fixed_cols = ["col1", "col2"] # 合并固定列与筛选列的名称列表 target_cols = fixed_cols + selected_cols # 一次性获取目标子DataFrame df1 = df[target_cols]
Pandas对批量列选取的优化远优于循环拼接,这种方法性能更高,代码也更易读。
方法二:修正循环逻辑(适合必须用循环的场景)
如果一定要用循环实现,需要将df1的初始化放在循环外部,避免每次迭代都重置:
# 先初始化df1为固定列 df1 = df[["col1", "col2"]] # 遍历筛选列列表,逐列添加 for col in selected_cols: df1 = df1.join(df[[col]])
这样每次循环都会在已有的df1基础上追加新列,不会覆盖之前的结果。
内容的提问来源于stack exchange,提问作者jPV
相关产品推荐
相关产品推荐

