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

pandas循环重排CSV列数据报ValueError问题求解

问题背景

现有data.csv文件,使用>作为拼接数据块的分隔符,原始数据格式如下:

>
1.094   1.128   1.439
3.064   3.227   3.371
>
5.131   5.463   5.584
3.65    3.947   4.135
>
1.895   1.954   2.492
5.307   5.589   5.839

需要将列数据横向并排重排,共生成3个文本文件,且每行末尾额外追加0、5两个固定值,预期输出效果:

# file1.txt内容
1.094  5.131  1.895 0 5
3.064  3.65   5.307 0 5

# file2.txt内容
1.128  5.463  1.954 0 5
3.227  3.947  5.589 0 5

# file3.txt内容
1.439  5.584  2.492 0 5
3.371  4.135  5.839 0 5
原代码报错原因

原代码存在几个核心问题,直接导致报错和逻辑不符合预期:

  • 读取文件时没有处理>分隔符,直接用pd.read_csv按制表符读取,会把分隔符行识别为异常数据,读入的DataFrame结构完全错误
  • 遍历df时拿到的columns是列名(字符串类型),而iloc要求传入整数位置索引,直接传字符串就会触发你遇到的ValueError
  • data.concat['data']属于语法错误,pandas的concat是顶层函数,不是Series/DataFrame的实例方法,也不能用方括号调用
  • 完全没有实现数据块拆分、横向拼接、追加固定值、按列输出为多个文件的核心逻辑
可直接运行的实现代码

按数据结构拆分处理即可,逻辑清晰无冗余依赖:

# 第一步:读取文件,按>拆分独立数据块
with open('data.csv', 'r', encoding='utf-8') as f:
    raw_content = f.read()

block_list = []
for block in raw_content.split('>'):
    block = block.strip()
    if not block:
        continue
    # 解析每个块内的数值为二维列表
    block_rows = []
    for line in block.split('\n'):
        line = line.strip()
        if not line:
            continue
        block_rows.append([float(num) for num in line.split()])
    block_list.append(block_rows)

# 第二步:按列位置横向拼接,追加固定值后写入对应文件
total_col = len(block_list[0][0])  # 每个块的列数,即需要生成的文件数
for col_idx in range(total_col):
    output_lines = []
    # 遍历每一行,从所有块中取对应列的数值
    for row_idx in range(len(block_list[0])):
        line_nums = [str(block[row_idx][col_idx]) for block in block_list]
        # 追加末尾固定的0和5
        line_nums.extend(['0', '5'])
        output_lines.append('  '.join(line_nums))
    # 写入文件
    with open(f'file{col_idx+1}.txt', 'w', encoding='utf-8') as f:
        f.write('\n'.join(output_lines) + '\n')

运行上述代码后,生成的3个文件内容和预期格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:12:33