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

