You need to enable JavaScript to run this app. 使用astroquery匹配GALEX星表时CSV读写报ValueError如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用astroquery匹配GALEX星表时CSV读写报ValueError如何解决

问题根因
  • 你构造表头时使用的是最后一次循环返回的catalogData的列名,若最后一次查询无匹配结果、catalogData为空,表头长度就会和实际匹配到的行数据长度不一致,触发列数不匹配的报错
  • 代码中目前保留了测试用的if iteration > 2: break逻辑,正式运行需要先删除,否则只会处理前2个星系
修复方案

推荐直接用astropy的Table结构存储匹配结果,不需要手动维护表头和列的对应关系,从根源避免列数不匹配问题,修改后代码如下:

from astroquery.mast import Catalogs
import numpy as np
from astropy.io import ascii
from astropy.table import Table

myfile='/Users/slaterjonesoden/Desktop/GALEX_analysis/RQE_sample_data.csv'
sample = ascii.read(myfile, format='csv', delimiter=',', guess=True)
# 初始化空Table存储结果
galexMatchCatalog = Table()
iteration = 1

for each_galaxy in sample:
    print(f"处理第{iteration}个星系,RA={each_galaxy['RAgal']}, DEC={each_galaxy['DECgal']}")
    iteration += 1
    # 可根据需求调整匹配半径,这里示例为3角秒,默认是1角秒
    catalogData = Catalogs.query_object(f"{each_galaxy['RAgal']} {each_galaxy['DECgal']}", catalog="Galex", radius="3s")
    if len(catalogData) == 0:
        print("该星系无GALEX匹配结果,跳过")
        continue
    # 取匹配到的第一个结果
    match_row = catalogData[0]
    # 追加SDSS的坐标字段
    match_row['sdss_ra'] = each_galaxy['RAgal']
    match_row['sdss_dec'] = each_galaxy['DECgal']
    # 加入结果表
    galexMatchCatalog.add_row(match_row)

# 直接写入结果,无需手动指定表头
ascii.write(galexMatchCatalog, '/Users/slaterjonesoden/Desktop/GALEX_analysis_codes/172_RQEs_galex_mast_match.csv', format='csv', overwrite=True)
可选修改说明

如果要保留你原本的列表拼接写法,只需要调整表头的获取逻辑即可:在第一次拿到有效匹配结果时就保存表头,不要使用最后一次循环的查询结果构造表头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 23:39:02