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

