You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:07:08