使用SkyCoord转换笛卡尔坐标触发KeyError:0问题求助
问题分析与解决思路
问题代码
# print(df['parallax'].min()) # 724097.8971232784 # print(df['parallax'].max()) # 767397.7874147035 # Convert the RA, Dec, and parallax to 3D Cartesian coordinates c = SkyCoord(ra=df['ra']*u.deg, dec=df['dec']*u.deg, distance=df['parallax']*u.pc, frame='icrs')
运行触发KeyError:0,已定位错误源于distance参数,数据集无NaN条目,使用astropy 5.1版本。
核心解决步骤
修正视差与距离的单位转换逻辑
天文数据中视差(parallax)的标准单位是毫角秒(mas),距离(pc)的计算公式为distance = 1000 / parallax(mas)。你直接将视差值作为距离的pc值传入,数值高达72万+pc,既不符合天文常识,也会导致SkyCoord处理异常。正确转换代码:# 假设parallax列单位为mas,转换为距离pc distance = (1000 / df['parallax']) * u.pc c = SkyCoord(ra=df['ra']*u.deg, dec=df['dec']*u.deg, distance=distance, frame='icrs')规避pandas Series索引兼容问题
astropy 5.1对pandas Series的索引处理可能存在兼容性问题,尝试将Series转为numpy数组传入:c = SkyCoord(ra=df['ra'].values*u.deg, dec=df['dec'].values*u.deg, distance=df['parallax'].values*u.pc, frame='icrs')版本兼容性测试
如果上述两步无效,尝试升级astropy到最新稳定版,或降级到5.0版本,排查版本特定的bug。
内容的提问来源于stack exchange,提问作者coCoKNIght
相关产品推荐
相关产品推荐

