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

按列合并两个含字符串首列的_4.csv文件时触发列数错误的排查与修复

报错根因

该报错与首列存储字符串没有关联,是多处实现细节缺失叠加导致的:

  • np.loadtxt 内置默认分隔符为任意连续空白字符,并未按照CSV的逗号规则拆分内容。这种拆分逻辑下,首列里的带空格文本(比如示例里的over 40、UHF case)、单元格前后冗余的空格,都会被误判定为列分隔符,导致不同行拆分得到的列数不一致,触发列数校验错误
  • 维度变换逻辑存在缺陷:temp_data堆叠完成后形状为(2, 6, 4)(对应2个文件、每个文件6行、每行4列),直接调用transpose()会反向排列所有维度,得到(4, 6, 2)的形状,最终输出的行列结构完全偏离预期的“每行左右拼接两个文件的同位置内容”的效果。
修复步骤
  • 调用np.loadtxt时显式指定逗号为分隔符,关闭默认的空白拆分逻辑
  • 对加载的每个单元格做首尾空格剔除,避免合并后出现列错位
  • 按明确的轴顺序调整数组维度,确保两个文件的每一行按列左右对齐,而非跨维度错位
修正后的可运行代码
import os
import numpy as np

# 匹配当前工作目录下所有以_4.csv为后缀的目标文件
files_in_dir = [f for f in os.listdir(os.getcwd()) if f.endswith('_4.csv')]
temp_data = []

for filename in files_in_dir:
    loaded_data = np.loadtxt(
        filename,
        dtype='str',
        delimiter=',',  # 显式指定逗号为列分隔符
        # 给每列加自动去空格的转换器,兼容单元格前后带冗余空格的场景
        converters={col_idx: lambda cell_content: cell_content.strip() for col_idx in range(100)}
    )
    temp_data.append(loaded_data)

temp_data = np.array(temp_data)
# 维度变换:从(文件数, 行数, 单文件列数) -> (行数, 单文件列数, 文件数)
# 拉平最后两维后得到(行数, 总列数)的结构,刚好符合左右列拼接的预期
combined_data = temp_data.transpose(1, 2, 0).reshape(temp_data.shape[1], -1)
np.savetxt('_mix.csv', combined_data, fmt='%s', delimiter=',')
避坑提示
  • 处理逗号分隔的CSV文件时,必须给np.loadtxt显式传入delimiter=',',依赖默认空白分隔逻辑大概率会在带空格的文本列上触发解析错误
  • 如果目标文件存在表头、空行,可通过skiprows=1跳过表头、comments=None关闭注释识别逻辑提升兼容性
  • 加载完成后需要校验两个文件的行数一致,否则维度变换时会触发shape不匹配的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 09:45:06