Pandas read_table读取txt文件报错:行token数比预期值多1
问题原因
这个报错和数据里的负值没有任何关系,问题出在你设置的分隔符规则上:
- 你手动指定了
delimiter=" ",意味着解析器只会把单个半角空格识别为列分隔符 - 你提供的txt文件中,列之间存在数量不一致的多个空格,部分行末尾还带有多余的尾随空格,这种场景下连续空格会被解析成空值字段,最终统计到的字段数和表头定义的6列不匹配,就会抛出你看到的解析错误。
修复方案
只需要调整read_table的分隔符参数即可,不需要修改原始数据文件,两种常用写法任选其一:
- 直接删除
delimiter=" "参数,pandas会自动识别连续的空白字符(多个空格、制表符都支持)作为分隔符,同时自动忽略行首、行尾的多余空白 - 显式指定分隔符为匹配任意长度空白的正则表达式,兼容性更好,适合格式不那么规整的空格分隔文本文件
修改后的读取代码如下,后续你的数据处理逻辑完全不需要改动:
import matplotlib.pyplot as plt import numpy as np import pandas as pd # 推荐显式指定sep为正则\s+,适配多空格分隔的场景 df = pd.read_table('D:/Tareas/Malla.txt', header=0, sep=r'\s+') # Densidad Z = df.loc[:, 'z'] # oxígeno O3_0 = df.loc[:4, 'OIII'] O3_1 = df.loc[5:9, 'OIII'] # Nitrógeno N2_0 = df.loc[:4, 'NII'] N2_1 = df.loc[5:9, 'NII'] # Alpha Halpha_0 = df.loc[:4, 'Ha'] Halpha_1 = df.loc[5:9, 'Ha'] # Todos allyO = df.loc[:, 'OIII'] allxN = df.loc[:, 'NII'] allxHa = df.loc[:, 'Ha'] ex = np.log10(allxN/allxHa) ey = np.log10(allyO)
补充提示
你贴的文件片段中表头和第一行数据之间有空行也不会影响解析,read_table默认开启skip_blank_lines=True参数,会自动跳过文件中的空行。
读取完成后可以执行print(df.columns)和print(df.head())快速检查,确认列名、数据对应关系正确即可。
内容的提问来源于stack exchange,提问作者Hache 99
相关产品推荐
相关产品推荐

