如何使用Astroquery从Simbad获取天体星等?
解决Simbad获取星等数据的错误及正确方法
你遇到的错误是因为measurements并非Simbad官方支持的votable字段,导致astroquery无法解析返回的VOTABLE文件。要正确获取星等数据,有两种常用方案:
方案1:直接使用预定义星等字段
Simbad提供了整理好的单波段星等字段(如Vmag、Bmag、Umag等),直接调用即可获取对应星等数值,无需额外转换。
修正后的完整代码:
from astroquery.simbad import Simbad import pandas as pd inputObject = 'ABELL 2218; M33; M31; M101; M42; M98' listObject = [obj.strip() for obj in inputObject.split(';')] # 清理天体名称的空格 # 添加需要的字段:包含星等及你原本需要的其他字段 Simbad.add_votable_fields('z_value', 'rv_value', 'dim_majaxis', 'dim_minaxis', 'Vmag', 'Bmag') # 查询天体数据 result_table = Simbad.query_objects(listObject) dff = result_table.to_pandas() # 保留需要的列(按需调整) keep_columns = ['MAIN_ID', 'RA', 'DEC', 'Vmag', 'Bmag', 'z_value', 'rv_value', 'dim_majaxis', 'dim_minaxis'] dff = dff[keep_columns] # 移除临时添加的字段 Simbad.remove_votable_fields('z_value', 'rv_value', 'dim_majaxis', 'dim_minaxis', 'Vmag', 'Bmag') # 格式化显示结果 dff.style.format(precision=5, na_rep='No data')
方案2:获取完整测光数据(含多波段及误差)
如果需要获取天体的所有可用测光数据(包括波段、星等、误差等详细信息),可以使用photometry字段,不过该字段返回嵌套表,需要单独处理:
示例代码:
from astroquery.simbad import Simbad inputObject = 'ABELL 2218; M33; M31; M101; M42; M98' listObject = [obj.strip() for obj in inputObject.split(';')] # 添加photometry字段 Simbad.add_votable_fields('photometry') result_table = Simbad.query_objects(listObject) # 遍历每个天体,提取测光数据 for idx, obj in enumerate(result_table): print(f"\n=== {listObject[idx]} ({obj['MAIN_ID']}) 的测光数据 ===") if obj['PHOTOMETRY'] is not None: print(obj['PHOTOMETRY']) else: print("无可用测光数据") # 移除字段 Simbad.remove_votable_fields('photometry')
补充说明
- 常用星等字段:
Umag(U波段)、Bmag(B波段)、Vmag(V波段)、Rmag(R波段)、Imag(I波段)等。 - 如果需要星等的误差,可以添加对应字段,比如
Vmag_error、Bmag_error。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

