gpt4 book ai didi

python - 将具有度分秒(DMS)坐标的 Pandas 数据框转换为十进制度

转载 作者:太空狗 更新时间:2023-10-30 02:25:08 24 4
gpt4 key购买 nike

我有一个如下所示的数据框,我想将度、分、秒格式的LatitudeLongitude 列转换为十进制 - 正确的半球为负。有没有简单的方法可以做到这一点?

Parent Company  CPO PKO Latitude    Longitude
Incasi Raya X   0°51'56.29"S 101°26'46.29"E
Incasi Raya X   1°23'39.29"S 101°35'30.45"E
Incasi Raya X   0°19'56.63"N 99°22'56.36"E
Incasi Raya X   0°21'45.91"N 99°37'59.68"E
Incasi Raya X   1°41'6.56"S 102°14'7.68"E
Incasi Raya X   1°15'2.13"S 101°34'30.38"E
Incasi Raya X   2°19'44.26"S 100°59'34.55"E
Musim Mas X   1°44'55.94"N 101°22'15.94"E

例如 0°51'56.29"S 将转换为 -0.8656361

最佳答案

根据 SO 中的函数回答我的问题,您可以这样做:

有趣的是,对于具有 +500 行的数据集,此答案的速度也是 MaxU 和 Amis 答案的 2 倍。我敢打赌瓶颈是 str.extract()。但显然有些事情很奇怪。

import pandas as pd
import re

#https://stackoverflow.com/questions/33997361
def dms2dd(s):
# example: s = """0°51'56.29"S"""
degrees, minutes, seconds, direction = re.split('[°\'"]+', s)
dd = float(degrees) + float(minutes)/60 + float(seconds)/(60*60);
if direction in ('S','W'):
dd*= -1
return dd

df = pd.DataFrame({'CPO': {0: 'Raya', 1: 'Raya'},
'Latitude': {0: '0°51\'56.29"S', 1: '1°23\'39.29"S'},
'Longitude': {0: '101°26\'46.29"E', 1: '101°35\'30.45"E'},
'PKO': {0: 'X', 1: 'X'},
'ParentCompany': {0: 'Incasi', 1: 'Incasi'}})

df['Latitude'] = df['Latitude'].apply(dms2dd)
df['Longitude'] = df['Longitude'].apply(dms2dd)

打印 df 返回:

    CPO   Latitude   Longitude PKO ParentCompany
0 Raya -0.865636 101.446192 X Incasi
1 Raya -1.394247 101.591792 X Incasi

更新:要纠正您的错误,您可以按照以下方式做一些事情:

m = df['Latitude'].str[-2] != '"'
df.loc[m, 'Latitude'] = df.loc[m, 'Latitude'].str[:-1] + '"' + df.loc[m, 'Latitude'].str[-1]

完整示例:

import re

s1 = """0°51'56.29"S"""
s2 = """0°51'56.29S"""

df = pd.Series((s1,s2)).to_frame(name='Latitude')

m = df['Latitude'].str[-2] != '"'
df.loc[m, 'Latitude'] = df.loc[m, 'Latitude'].str[:-1] + '"' + df.loc[m, 'Latitude'].str[-1]

print(df)

关于python - 将具有度分秒(DMS)坐标的 Pandas 数据框转换为十进制度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50193159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com