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

遍历DataFrame列,每两列拼接生成新DataFrame的问题求助

问题排查与修复方案

原代码的三个核心问题

  • 循环范围逻辑错误:原代码遍历所有列索引,导致多数循环的切片超出列范围,完全不符合“每4列取前2列”的需求,应该按步长4循环,只取0、4、8…这类起始位置。
  • 列切片范围错误:原切片i*4:i*4+1遵循Python左闭右开规则,只能取到单列,要获取两列得改成start_idx:start_idx+2。
  • 拼接方向错误:默认pd.concat是行拼接,会把数据纵向堆叠成多行,而我们需要横向拼接列,必须加上axis=1参数。

修复后的代码(基础版)

import pandas as pd

# 读取原始数据
df = pd.read_csv(r'C:\Users\zj\Volume-Sampled Export.csv')
selected_columns = []

# 按每4列一组,取每组的前2列(0&1、4&5...)
for start_idx in range(0, len(df.columns), 4):
    # 切片取当前组的两列,处理最后一组可能不足2列的情况
    cols = df.columns[start_idx:start_idx+2]
    selected_columns.append(df[cols])

# 横向拼接所有选中的列组
df2 = pd.concat(selected_columns, axis=1)

# 保存结果,去掉自动生成的索引列
df2.to_csv(r'C:\Users\zj\totalfeed1.csv', index=False)

优化版(适合大型数据表,效率更高)

不用循环拼接,直接生成所有需要保留的列索引,一次性提取:

import pandas as pd

df = pd.read_csv(r'C:\Users\zj\Volume-Sampled Export.csv')

# 生成所有需要保留的列索引:0,1,4,5,8,9...
keep_cols = []
for start in range(0, len(df.columns), 4):
    keep_cols.extend([start, start+1])
# 过滤掉超出列数的索引(避免最后一组不足2列报错)
keep_cols = [idx for idx in keep_cols if idx < len(df.columns)]

# 直接提取目标列
df2 = df.iloc[:, keep_cols]

df2.to_csv(r'C:\Users\zj\totalfeed1.csv', index=False)

内容的提问来源于stack exchange,提问作者zhhJll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:30:20