如何将Pandas中的DMS转换为DD?

2024-06-26 17:44:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python编程非常陌生,目前正在执行我的第一个项目。然而,在这一刻,我已经完全停止。我已经研究了许多解决方案,但似乎没有一个有效

我有一个关于伦敦32个自治区的经纬度坐标的熊猫数据框,采用这种格式。坐标是东西混合的,但纬度保持不变(北):

  1. Barking和Dagenham 51°33′39〃北0°09′21〃东
  2. 巴内特51°37′31〃北纬0°09′06〃西
  3. 贝克斯利51°27′18〃北纬0°09′02〃东经
  4. 布伦特51°33′32〃北纬0°16′54〃西
  5. 布罗姆利51°24′14〃北纬0°01′11〃东经

我需要格式化坐标,使它们看起来像这样:

  1. Barking和Dagenham 51.560833 0.155833
  2. 巴尼特51.625278-0.151667
  3. 贝克斯利51.455000 0.150556
  4. 布伦特51.558889-0.281667
  5. 布罗姆利51.403889 0.019722

我已经做到了这一点:

pattern = r'(?P<d>[\d\.]+).*?(?P<m>[\d\.]+).*?(?P<s>[\d\.]+)'

dms = df['Latitude'].str.extract(pattern).astype(float)

df['LATITUDE'] = dms['d'] + dms['m'].div(60) + dms['s'].div(3600)

dms = df['Longitude'].str.extract(pattern).astype(float)

df['LONGITUDE'] = dms['d'] + dms['m'].div(60) + dms['s'].div(3600)

我需要考虑的是方向

我该怎么做


Tags: 项目divdf编程extractdms解决方案float
1条回答
网友
1楼 · 发布于 2024-06-26 17:44:41

按照您已经使用的相同模式,添加regex组以捕获半球字母

...]+).*?(?P<h>[NSWE])

使用str.extract,但不要转换为float。应用map函数将字母转换为数字,然后将转换应用于float。更改用于计算delatitudelongitude的公式,以考虑半球方向,如下所示

pattern = r'(?P<d>[\d\.]+).*?(?P<m>[\d\.]+).*?(?P<s>[\d\.]+).*?(?P<h>[NSWE])'
hemisphere_sig = {'N': 1, 'S': -1, 'E': 1, 'W': -1}

dms = df['Latitude'].str.extract(pattern)
dms['h'] = dms['h'].map(hemisphere_sig)
dms = dms.astype(float)

df['LATITUDE'] = dms['h'] * (dms['d'] + dms['m'].div(60) + dms['s'].div(3600))

dms = df['Longitude'].str.extract(pattern)
dms['h'] = dms['h'].map(hemisphere_sig)
dms = dms.astype(float)

df['LONGITUDE'] = dms['h'] * (dms['d'] + dms['m'].div(60) + dms['s'].div(3600))
print(df)

输出

                                           0    Latitude  Longitude   LATITUDE  LONGITUDE
0  Barking and Dagenham 51°33′39″N 0°09′21″E  51°33′39″N  0°09′21″E  51.560833   0.155833
1                Barnet 51°37′31″N 0°09′06″W  51°37′31″N  0°09′06″W  51.625278  -0.151667
2                Bexley 51°27′18″N 0°09′02″E  51°27′18″N  0°09′02″E  51.455000   0.150556
3                 Brent 51°33′32″N 0°16′54″W  51°33′32″N  0°16′54″W  51.558889  -0.281667
4               Bromley 51°24′14″N 0°01′11″E  51°24′14″N  0°01′11″E  51.403889   0.019722

相关问题 更多 >