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
相关产品推荐
相关产品推荐

