奇妙问题集 # 地理“经纬度”数据的4种 Python 转换方法!

2020-11-06 12:54:39 浏览数 (2)

作者:黄

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

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

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

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

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

① 方法一:series的apply()函数
代码语言:javascript复制
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()方法
代码语言:javascript复制
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()方法
代码语言:javascript复制
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()方法
代码语言:javascript复制
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

0 人点赞