Py学习  »  Python

用Python讲述:地理“经纬度”数据的4种转换方法!

程序员大咖 • 1 年前 • 692 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇


作者丨黄伟呢

来源丨数据分析与统计学之美


关于“度、分、秒”的印象,我还是停留在初、高中的印象,因为那个时候学习过他们之间的数学转换。今天突然被问及,因此我将其整理出来,供大家学习。

在数学中,表示角度的度、分、秒分别使用°、′、″等符号进行表示。度与分,分与秒之间一律采用六十进制,它们的换算关系如下:

1°=60′    1°=3600″    1′=60″

接下来,我们利用群友提供的数据,来完成“度、分、秒”数据转“度”的操作,数据截图如下。

拿到这个需求,我随手就写出来了2种解决办法。但是最终在群友小小明(人称“明佬”)的修改和完善下,最后提供了四种解决办法。

① 方法一:series的apply()函数
import re
import pandas as pd

df = pd.read_csv("t.txt", index_col=0)
df.columns = ["经纬度数据"]
def func(s):
    arr = re.findall("\d+", s)
    return int(arr[0])+int(arr[1])/60+int(arr[2])/3600

df["final"] = df["经纬度数据"].apply(func)
df
② 方法二:series中str属性的split()方法
import re
import pandas as pd

df = pd.read_csv("t.txt", index_col=0)
df.columns = ["经纬度数据"]
tmp = df["经纬度数据"].str.split("°|′|″", expand=True).values[:, :3].astype(int)
df["final"] = tmp[:, 0] + tmp[:, 1]/60 + tmp[:, 2]/3600
df
③ 方法三:series中str属性的extract()方法
import re
import  pandas as pd

df = pd.read_csv("t.txt", index_col=0)
df.columns = ["经纬度数据"]
tmp = df["经纬度数据"].str.extract("(\d+)°(\d+)′(\d+)″").values.astype(int)
df["final"] = tmp[:, 0] + tmp[:, 1]/60 + tmp[:, 2]/3600
df
④ 方法四:series中str属性的extractall()方法
import re
import pandas as pd

df = pd.read_csv("t.txt", index_col=0)
df.columns = ["经纬度数据"]
tmp = df["经纬度数据"].str.extractall("(\d+)").unstack().values.astype(int)
df["final"] = tmp[:, 0] + tmp[:, 1]/60 + tmp[:, 2]/3600
df


-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/151911
 
692 次点击