我有一个pandas
数据框,其中包括列_RA2000
和_DEJ2000
,因此:
_RAJ2000,_DEJ2000,RA_ICRS,DE_ICRS,mode,q_mode,class,SDSS12,m_SDSS12,ObsDate,Q,umag,e_umag,gmag,e_gmag,rmag,e_rmag,imag,e_imag,zmag,e_zmag,zsp,zph,e_zph,<zph>
02 59 43.85208,+00 14 50.0532,44.932717,0.247237,1,+,6,J025943.85+001450.0,*,2004.7267,3,25.252,0.709,24.427,0.377,22.923,0.186,22.844,0.255,22.173,0.505,,,,
02 59 43.18896,+00 14 49.9776,44.929954,0.247216,1,+,3,J025943.18+001449.9,,2004.7267,3,25.77,0.713,23.41,0.267,22.467,0.183,21.612,0.132,20.905,0.301,,0.5976,0.1462,0.5771
02 59 45.92184,+00 15 09.6372,44.941341,0.252677,1,+,3,J025945.92+001509.6,,2004.7267,3,23.707,1.067,22.886,0.219,21.501,0.105,21.026,0.104,20.984,0.423,,0.423,0.0924,0.4151
02 59 44.95968,+00 15 11.7252,44.937332,0.253257,1,+,3,J025944.95+001511.7,,2004.7267,3,22.729,0.546,24.475,0.791,21.847,0.152,21.244,0.137,21.931,0.96,,0.4073,0.1245,0.4036
02 59 42.50736,+00 15 01.6416,44.927114,0.250456,1,,3,J025942.50+001501.6,*,2004.7267,3,22.529,0.467,22.705,0.198,22.117,0.203,21.279,0.139,20.905,0.418,,0.7674,0.0744,0.7239
02 59 42.88320,+00 15 01.8144,44.92868,0.250504,1,,3,J025942.88+001501.8,*,2004.7267,3,24.755,0.864,23.219,0.168,22.533,0.14,22.161,0.152,22.508,0.602,,0.3329,0.1434,0.2613
02 59 41.84880,+00 15 05.7924,44.92437,0.251609,1,+,3,J025941.84+001505.7,*,2004.7267,3,22.849,0.377,23.707,0.279,22.378,0.141,21.274,0.082,20.76,0.221,,0.6223,0.0731,0.6115
02 59 46.54512,+00 15 10.8972,44.943938,0.253027,1,+,3,J025946.54+001510.8,*,2004.7267,3,22.34,0.372,21.589,0.074,20.139,0.033,19.577,0.031,19.066,0.081,,0.4006,0.0569,0.4019
02 59 45.76656,+00 15 34.6932,44.940694,0.259637,1,,3,J025945.76+001534.6,,2004.7267,3,25.362,0.977,22.829,0.169,22.873,0.266,23.286,0.543,21.734,0.601,,0.5175,0.1433,0.3604
,我想把它们转换成度数,就像它们出现在RAJ2000
和DEJ2000
列中一样。我应该能够做到这一点与astropy
,但如果我尝试第一个:
from astropy import units as u
from astropy.coordinates import SkyCoord
c = SkyCoord('23 58 36.30073', 'icrs', unit=(u.hourangle))
我
ValueError: Invalid character at col 0 in angle 'icrs'
我的问题是:
- 为什么我输入的字符串导致错误,和
- 如何将
SkyCoord
应用于pandas
列?
您需要同时对两个坐标进行转换,并将框架作为关键字参数提供:
import pandas as pd
from astropy import units as u
from astropy.coordinates import SkyCoord
df = pd.DataFrame({'_RAJ2000': ['23 58 36.30073 ', '23 58 19.66200 ', '23 58 17.43747 ', '23 58 10.18153 ',
'23 57 42.51840 ', '23 56 32.18853 ', '23 56 30.99313 ', '23 56 06.29927 ',
'23 55 33.67007 ', '23 55 14.54907 ', '23 54 19.62527 ', '23 52 46.54273 ',
'23 52 02.17560 ', '23 51 50.76387 '],
'_DEJ2000': ['+03 07 21.9650', '+14 36 42.0370', '+15 16 40.3390', '+11 20 06.6370',
'+06 19 41.0660', '+07 30 53.1500', '+07 21 08.8880', '+11 24 22.3520',
'+04 37 36.1520', '+10 59 36.1680', '+08 15 14.7020', '+01 57 15.8870',
'+02 36 10.4110', '+03 53 50.8780']})
df = pd.concat(
(df, SkyCoord(df._RAJ2000, df._DEJ2000, frame='icrs', unit=(u.hourangle, u.deg)).to_table().to_pandas()),
axis=1).rename(columns={'ra': 'RAJ2000', 'dec': 'DEJ2000'})
结果:
_RAJ2000 _DEJ2000 RAJ2000 DEJ2000
0 23 58 36.30073 +03 07 21.9650 359.651253 3.122768
1 23 58 19.66200 +14 36 42.0370 359.581925 14.611677
2 23 58 17.43747 +15 16 40.3390 359.572656 15.277872
3 23 58 10.18153 +11 20 06.6370 359.542423 11.335177
4 23 57 42.51840 +06 19 41.0660 359.427160 6.328074
5 23 56 32.18853 +07 30 53.1500 359.134119 7.514764
6 23 56 30.99313 +07 21 08.8880 359.129138 7.352469
7 23 56 06.29927 +11 24 22.3520 359.026247 11.406209
8 23 55 33.67007 +04 37 36.1520 358.890292 4.626709
9 23 55 14.54907 +10 59 36.1680 358.810621 10.993380
10 23 54 19.62527 +08 15 14.7020 358.581772 8.254084
11 23 52 46.54273 +01 57 15.8870 358.193928 1.954413
12 23 52 02.17560 +02 36 10.4110 358.009065 2.602892
13 23 51 50.76387 +03 53 50.8780 357.961516 3.897466
如果您只想使用astropy来解析坐标字符串,您也可以使用Angle
类来执行此操作
>>> from astropy.coordinates import Angle
>>> Angle(['23 58 36.30073 ', '23 58 19.66200 '], unit='hourangle').to_value('deg')
array([359.65125304, 359.581925 ])
>>> Angle(['+03 07 21.9650', '+14 36 42.0370'], unit='deg').to_value('deg')
array([ 3.12276806, 14.61167694])