作者:黄
关于“度、分、秒”的印象,我还是停留在初、高中的印象,因为那个时候学习过他们之间的数学转换。今天突然被问及,因此我将其整理出来,供大家学习。
在数学中,表示角度的度、分、秒分别使用 °、′、″等符号进行表示。度与分,分与秒之间一律采用六十进制,它们的换算关系如下:
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