gpt4 book ai didi

python- 有效地将纬度从 ddmm.ssss 转换为度数

转载 作者:行者123 更新时间:2023-12-01 02:09:35 26 4
gpt4 key购买 nike

我正在将文本文件转换为 netCDF 格式。我正在将文本文件中的数据读取到数据框中,其中两列是 latitude_GPS 和 longitude_GPS。输入如下:

latitude_GPS, longitude_GPS
7537.4536, 3558.4985
7672.1534, 3214.9532

它们以 ddmm.ssss 为单位进行测量,这意味着如果我们有像 7537.4536 这样的值,这里“75”是度,“37”是分钟,“4536”是秒。我想将它们转换为十进制,除了缺失值,其值为 999.0
我当前的代码如下所示:

header_rows = 1

df = pd.read_csv(args.input_file, delim_whitespace=True, skiprows=header_rows, skip_blank_lines=True, names = column_names)

num_rows = sum(1 for line in open(args.input_file) if len(line.strip()) != 0) - header_rows

def lat_lon_gps(col_index):
return ((int(col_index)/100) + round((int(col_index%100))/60, 4) + round(round(col_index%1, 4)/3600, 4))

check_na = 999.0

i = 0
while i < num_rows:
if df['latitude_GPS'][i] != check_na:
df['latitude_GPS'][i] = lat_lon_gps(df['latitude_GPS'][i])

if df['longitude_GPS'][i] != check_na:
df['longitude_GPS'][i] = lat_lon_gps(df['longitude_GPS'][i])

返回部分计算(75 + 37/60 + 4536/3600)。上面的代码返回了我想要的结果,但是对于一个有 10000 行的文件运行这部分代码大约需要 50 分钟。有没有更快的方法来做到这一点。任何想法将不胜感激。

最佳答案

问题是您正在迭代每一行。您应该利用 pandas 和 numpy 提供的矢量化。

例如:

import numpy as np
import pandas as pd

df = pd.read_csv(args.input_file,
names=['latitude_GPS','longitude_GPS'],
skiprows=1)
check_na = 999.0

def lat_lon_gps(coords):
deg = np.floor(coords / 100)
minutes = np.floor(((coords / 100) - deg) * 100)
seconds = (((coords / 100) - deg) * 100 - minutes) * 100
return deg + minutes / 60 + seconds / 3600

# Exclude NAs
logic = df.latitude_GPS != check_na
df = df[logic]

df.latitude_GPS = lat_lon_gps(df.latitude_GPS)
df.longitude_GPS = lat_lon_gps(df.longitude_GPS)

关于python- 有效地将纬度从 ddmm.ssss 转换为度数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48780185/

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