使用numpy.loadtxt读取表格文本文件报错,如何转为表格形式?
解决numpy.loadtxt读取文本文件列数不匹配的问题
问题原因
报错ValueError: Wrong number of columns at line 6说明文件第6行按逗号分割后的列数和前面行不一致,numpy.loadtxt要求所有行的列数必须完全相同,格式不规整的行就会触发该错误。
解决方法
1. 先定位问题行的具体内容
运行这段代码,查看第6行的列数和实际内容,明确是多了逗号、少了逗号还是存在其他格式问题:
with open('PS.prg1903-001_KSK_LB__0_00001.txt', 'r') as f: for line_num, line in enumerate(f, start=1): col_count = line.strip().count(',') + 1 print(f"第{line_num}行: {col_count}列") if line_num == 6: print(f"内容: {repr(line.strip())}")
2. 用pandas读取(新手首选)
pandas对不规整表格的兼容性远优于numpy,能自动处理或跳过错误行,直接生成标准表格:
import pandas as pd # 跳过表头,跳过列数不符的行(pandas 1.4+用on_bad_lines='skip',旧版本用error_bad_lines=False) df = pd.read_csv('PS.prg1903-001_KSK_LB__0_00001.txt', skiprows=1, on_bad_lines='skip') # 查看前几行数据 print(df.head())
读取后得到的df是标准表格格式,后续做数据分析也更便捷。
3. 坚持用numpy的处理方案
如果必须使用numpy,可以手动过滤或补全列数不符的行:
import numpy as np data_list = [] expected_cols = None with open('PS.prg1903-001_KSK_LB__0_00001.txt', 'r') as f: # 跳过第一行表头 next(f) for line in f: line = line.strip() if not line: continue parts = line.split(',') # 确定预期列数(取第一行有效数据的列数) if expected_cols is None: expected_cols = len(parts) # 列数匹配才加入列表,否则跳过(也可以用注释里的代码补全空值) if len(parts) == expected_cols: data_list.append(parts) # else: # # 补全空值到预期列数 # parts += [''] * (expected_cols - len(parts)) # data_list.append(parts) # 转为numpy数组 data = np.array(data_list, dtype=str) print(data)
内容的提问来源于stack exchange,提问作者user18152330
相关产品推荐
相关产品推荐

