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

Pandas读取表格数据时触发IndexError的问题咨询

解决读取天文目录时的IndexError问题

问题场景

你有如下格式的空格分隔天文表格文件:

ID Ah Am  RAs  Ed Em  DEs   Vmag    U-B    B-V    V-I    e_    e_    e_    e_ _ _ _ _ mb n_ 2MASS
   1 10 42 57.6 -59 47 22.6 18.681         1.105  1.461 0.002       0.103 0.053 2 0 1 2       10425765-5947229
   2 10 42 57.7 -59 44 22.2 18.303                2.764 0.012             0.013 2 0 0 2
   3 10 42 57.7 -59 46 58.0 18.610                1.573 0.038             0.039 2 0 0 2       10425776-5946583
   4 10 42 57.8 -59 47 49.5 12.870         0.764  0.799 0.009       0.009 0.009 3 0 1 3       10425773-5947495
   5 10 42 57.8 -59 44 03.4 18.815         1.072  1.433 0.017       0.110 0.043 2 0 1 2
   6 10 42 57.8 -59 48 29.3 18.697                1.304 0.014             0.019 2 0 0 2       10425778-5948293
   7 10 42 57.8 -59 44 08.5 17.817         1.700  2.384 0.011       0.108 0.013 2 0 1 2       10425786-5944083

尝试用以下代码读取并打印Vmag列时触发IndexError:

df = pd.read_table('Hur_et_al_2012_catalog/table1.dat')
print(df.iloc[:, 7])

错误原因

pd.read_table默认使用制表符(\t)作为分隔符,但你的表格是多个空格分隔的,这会导致pandas把整行内容识别为单一列,DataFrame的列数远小于7,调用iloc[:,7]自然会超出索引范围。

解决方法

方法1:用正则匹配任意数量空格作为分隔符

使用pd.read_csv并指定sep='\s+'(匹配1个及以上空格),正确分割列:

import pandas as pd
df = pd.read_csv('Hur_et_al_2012_catalog/table1.dat', sep='\s+')
# 直接通过列名获取比索引更可靠
print(df['Vmag'])

方法2:用固定宽度格式读取(更适合天文表格)

这类对齐的天文表格属于固定宽度格式,用pd.read_fwf可以自动推断列宽度,无需手动指定分隔符:

import pandas as pd
df = pd.read_fwf('Hur_et_al_2012_catalog/table1.dat')
print(df['Vmag'])

额外建议

尽量使用列名(如df['Vmag'])而非位置索引(如iloc[:,7])获取数据,避免因列顺序变化导致的索引错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:06:18