python - 如何在python中将纬度/经度值转换为十进制?
问题描述
我在这样的数据框中有Latitude
和Longitude
列:
Station Latitude Longitude
0 1 18° 23' 20.9 72° 23' 25.9
1 2 17° 22' 20.5 73° 22' 21.5
etc etc etc
值之间有空格。我想将经纬度值转换为十进制(浮点数)
我试过这段代码:
def dms2dd(s):
degrees, minutes, seconds = re.split('[°\'\ ]+', s)
dd = -1*float(degrees) -1*float(minutes)/60 -1*float(seconds)/(60*60);
return dd
df['LATITUDE'] = df['LATITUDE'].apply(dms2dd)
df['LONGITUDE'] = df['LONGITUDE'].apply(dms2dd)
但是给我一个错误:
ValueError:要解包的值太多(预期为 3)。
车站位于南半球(这就是我在函数中使用 (-) 的原因)。
你能帮我吗?
解决方案
Series.str.extract
与给定的正则表达式一起使用从给定的地理坐标pattern
中提取和分量degree
,然后使用公式将值转换为十进制度(注意:如果坐标来自南半球或西半球,您可以相应地调整公式):minutes
seconds
DMS
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)
# Similarly we do for the longitude
dms = df['Longitude'].str.extract(pattern).astype(float)
df['LONGITUDE'] = dms['d'] + dms['m'].div(60) + dms['s'].div(3600)
结果:
# print(df)
Station Latitude Longitude LATITUDE LONGITUDE
0 1 18° 23' 20.9 72° 23' 25.9 18.389139 72.390528
1 2 17° 22' 20.5 73° 22' 21.5 17.372361 73.372639
推荐阅读
- hibernate - 一对一级联持久性抛出'NULL not allowed for the foreign-key column' JdbcSQLIntegrityConstraintViolationException
- arrays - 在 perl 中使用电子邮件 :: MIME 发送多个文件?
- python - 如何为缺少的日期时间增加价值
- sql - 在没有现有触发器\机制的情况下查询以查看上次为表更新行的日期和时间?
- reactjs - History.push 无法读取未定义的属性“道具”
- python - Windows 上的 Jenkins:iOS 的 UE4 打包失败并显示“主机密钥验证失败”。
- apache-superset - 如何更改 apache 超集图表的背景颜色?
- php - 在 Wordpress 的 tag.php 中显示标签相关的档案
- apache-kafka - Compaction 在 Apache Kafka 中的工作原理
- c# - C# - MVC - 如何基于一个外键列出多个条目