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

Python批量合并CSV提取y列转置后新增type分类列问题求助

问题排查与修复方案

现有代码核心问题

  • 列插入逻辑完全错误:df.insert()是新增整列的方法,你在200次循环里反复执行插入操作,会生成200个重复的type列,完全不符合仅新增1列的要求;且插入时的value参数是给整列统一赋值,无法实现单行赋值的效果
  • 行判断边界错误:行索引从0开始计数,i <= 100会匹配前101行,和你预期的前100行赋值为0的需求不符
  • 冗余/拼写问题:重复导入glob、natsorted依赖包,拼写错误的shutils库未实际使用可直接删除;如果你的CSV是标准逗号分隔格式,read_csv中设置delim_whitespace=1会导致列读取错误,该参数仅适用于空白分隔的文本文件

修复方案

不需要循环插入列,直接用pandas向量化操作生成type列即可,修复后完整代码如下:

from glob import glob
from natsort import natsorted
import pandas as pd
import os

files = glob('./a_csv/*.csv')
save_path = "./data"

if not os.path.exists(save_path):
    os.mkdir(save_path)

# 合并所有CSV的y列
def read_2nd(fn):
    # 如果你用的是空格分隔的CSV再保留delim_whitespace=1,标准逗号分隔CSV删除该参数即可
    return pd.read_csv(fn, usecols=[1])

big_df = pd.concat([read_2nd(fn) for fn in natsorted(files)], axis=1)
df = big_df.T  # 转置数据

# 截取前120列
df = df.iloc[:, :120]
# 生成表头
header = [f"z_{i}" for i in range(120)] + ["type"]
# 直接新增type列,前100行赋值0,后100行赋值1
df['type'] = ['0'] * 100 + ['1'] * 100
# 输出文件
df.to_csv('./data/final.csv', header=header, index=False)

结果验证

输出后执行以下代码确认是否符合预期:

check_df = pd.read_csv('./data/final.csv')
print(check_df.shape) # 预期输出 (200, 121)
print(check_df['type'].value_counts()) # 预期输出 0出现100次,1出现100次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:39:01